IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

[D10] DBExpress de Delphi 7 à Delphi 10


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 216
    Points : 228
    Points
    228
    Par défaut [D10] DBExpress de Delphi 7 à Delphi 10
    Bonjour,

    J'essaie de convertir une application Delphi7 sous Delphi 10.4.2.
    La version 7 fonctionne avec dbexpress. Je souhaiterais, dans un premier temps, continuer à fonctionner de la même façcon avec Delphi 10.
    Je verrais plus tard, pour passer sous firedac.

    J'utilise les composants suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    type
      TForm1 = class(TForm)
        conn1: TSQLConnection;
        qry1: TSQLQuery;
        cds1: TClientDataSet;
        dsp1: TDataSetProvider;
        ds1: TDataSource;
        grid1: TDBGrid;
        SQLConnection1: TSQLConnection;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    Je les initialise ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    procedure TForm1.FormCreate(Sender: TObject);
    var
      str: string;
    begin
      grid1.DataSource := ds1;
      ds1.DataSet := cds1;
      cds1.ProviderName := dsp1.Name;
      dsp1.DataSet := qry1;
      qry1.SQL.Text := 'SELECT * FROM dbo.TSERVICE;';
      qry1.SQLConnection := conn1;
     
      conn1.LoginPrompt := False;
      conn1.ConnectionName := 'MSSQLConnection';
      conn1.DriverName := 'MSSQL';
      conn1.GetDriverFunc := 'getSQLDriverMSSQL';
      conn1.LibraryName := 'dbexpmss.dll';  // 'dbxmss.dll' pour d10
      conn1.VendorLib := 'oledb';
     
      conn1.Params.Clear;
      conn1.Params.Values['DriverName'] := 'MSSQL';
      conn1.Params.Values['HostName'] := '.';
      conn1.Params.Values['Database'] := 'ma_table';
      conn1.Params.Values['User_Name'] := 'sa';
      conn1.Params.Values['Password'] := 'password';
     
      try
        conn1.Open;
        cds1.Open;
        str := 'ok';
      except
        on e: Exception do
          str := e.Message;
      end;
     
      ShowMessage(str);
    end;
    Ce code fonctionne parfaitement sous Delphi 7.
    Sous Delphi 10.4.2, j'obtiens l'erreur suivante : "Erreur DBX: Le pilote n'a pas été correctement initialisé. La bibliothèque client est manquante, n'est pas installée correctement, sa version est incorrecte, ou le pilote n'est pas dans le chemin système."

    J'ai placé dans le dossier de l'exe le fichier dbxmss.dll que j'ai récupéré dans le dossier "C:\Program Files (x86)\Embarcadero\Studio\21.0\bin".

    Quelqu'un aurait-il une idée de ce qui ne fonctionne pas ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    Le Driver MSSQL utilisé par dbExpress est-il le même ?
    Surtout si le nom de la DLL a changé

    Par exemple en ADO pour MS SQL, tu as du choixi de combinaison entre Provider (le Driver semble par défaut MSDASQL lorsqu'il est omis)

    SQLOLEDB.1 - déprécié (probablement utilisé par dbexpmss.dll)
    SQLNCLI10.1 - nécessite une installation (utilisé par dbxmss.dll)
    SQLNCLI11.1 - nécessite une installation
    MSOLEDBSQL.1 - recommandé et nécessite une installation
    ODBC Driver 17 for SQL Server
    MSDASQL\ODBC Driver 17 for SQL Server
    MSDASQL\SQL Server


    la DLL DBExpress c'est juste un Proxy, cela expose les Interfaces qu'utilisent les composants Delphi en utilisant le véritable driver.

    dbxmss.dll = Microsoft SQL avec le client natif SQL 2008 = Microsoft SQL Server Native Client 10 = SQLNCLI10.1
    dbxmss9.dll = Microsoft SQL avec le client natif SQL 2005

    VendorLib ne doit pas être bon, sqlncli10.dll comme le tableau l'indique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      conn1.LibraryName := 'dbxmss.dll';
      conn1.VendorLib := 'sqlncli10.dll';
    Tu n'as pas osé une compilation 64bits dès le début ?
    Car si c'est le cas, faut installer les versions 64bits des drivers et utiliser les DLL DBX 64Bits aussi

    Ton Delphi est une version Entreprise ?
    DBExpress, ça semble abandonner depuis 2010, cela doit être effectivement présent que pour le temps de la migration vers une autre couche d'accès aux données.



    Toute cette connaissance, tu seras utile aussi pour FireDAC : Connexion à Microsoft SQL Server (FireDAC) puisque tu devrais installer et déployer sur les postes utilisateurs, le Driver MSSQL.

  3. #3
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 216
    Points : 228
    Points
    228
    Par défaut
    Le nom du driver doit toujours être MSSQL, c'est le nom que l'on utilise avec Firedac.
    J'ai fait des tests de connexion à ma base avec des composants Firedac cela fonctionne bien.
    Ce sera par contre un gros travail de modifier mon application pour firedac.

    J'ai bien modifié le nom de la dll avec la version de Delphi 10.

    Pour le moment, je suis toujours en 32 bits. Je préfère rester au maximum prêt de la version de base.
    Le but, pour le moment est d'évaluer le travail pour passer toutes nos applications sur Delphi 10. C'est pas gagné

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    Citation Envoyé par oneDev Voir le message
    Le nom du driver doit toujours être MSSQL, c'est le nom que l'on utilise avec Firedac.
    Je pense que nous ne parlons pas de la même chose
    Citation Envoyé par ShaiLeTroll Voir le message
    Le Driver MSSQL utilisé par dbExpress est-il le même ?
    J'évoque le Driver MSSQL, le vrai driver, l'outil installé pas juste du DriverName dans DBX qui n'a pas grand intérêt autre qu'aider initialement les développeurs à trouver les bons paramètres.

    Si dbxdrivers.ini contient une section [MSSQL], cela rempli automatiquement LibraryName et VendorLib
    Si on les rempli manuellement, DriverName ne sert à rien

    En FireDAC, c'est dans fdconnectiondefs.ini qui reprend le même concept que dbxconnections.ini

  5. #5
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 216
    Points : 228
    Points
    228
    Par défaut
    Je n'avais effectivement pas compris.
    J'ai bien trouvé le fichier dbxdrivers.ini. Il contient bien une section MSSQL.

    Je ne devrais donc avoir besoin que de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      conn1.LoginPrompt := False;
      conn1.DriverName := 'MSSQL';
     
      conn1.Params.Clear;
      conn1.Params.Values['DriverName'] := 'MSSQL';
      conn1.Params.Values['HostName'] := '.';
      conn1.Params.Values['Database'] := 'ma_base';
      conn1.Params.Values['User_Name'] := 'sa';
      conn1.Params.Values['Password'] := 'password';
    J'obtiens toujours l'erreur "Erreur DBX: Le pilote n'a pas été correctement initialisé..."

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    Malgré l'installation de SQLNCLI10.1 ?
    FireDac doit plutôt utiliser le SQLNCLI11.1 ou à défaut SQLOLEDB.1, il faut donc les deux SQLNCLI .

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    je commence à sortir de mon "estivation" (bien que pour la semaine dernière ce fut plus "hibernation")
    Citation Envoyé par oneDev Voir le message
    J'obtiens toujours l'erreur "Erreur DBX: Le pilote n'a pas été correctement initialisé..."
    OK mais en débug ou au runtime ?

    Pour peu que le poste soit un 64bits il faut, pour le debug avoir une version MSSQL en 32 bits (biblio dans SYSWOW64) et par la suite pour le déploiement (ou en exécution) mettre la dll dans le répertoire de l'exe, en fonction du nombre de bits

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment connecter dbexpress dans Delphi Berlin 10.1 avec Mysql57
    Par rdrolet dans le forum Bases de données
    Réponses: 19
    Dernier message: 17/09/2016, 14h38
  2. Probleme Firebird et DBExpress de DELPHI XE3
    Par kaouane dans le forum Firebird
    Réponses: 3
    Dernier message: 31/01/2015, 21h31
  3. installer DBexpress sous delphi 6 personnel édition
    Par Ice-tea dans le forum Delphi
    Réponses: 1
    Dernier message: 02/06/2006, 11h01
  4. Réponses: 3
    Dernier message: 29/06/2005, 13h56
  5. DBExpress, Delphi 6 et MySQL : Erreur DBX
    Par BoBoToTo dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/05/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo