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

  1. #1
    Membre habitué Avatar de oneDev
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2019
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2019
    Messages : 146
    Points : 167
    Points
    167
    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
    12 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 261
    Points : 21 665
    Points
    21 665
    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.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué Avatar de oneDev
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2019
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2019
    Messages : 146
    Points : 167
    Points
    167
    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
    12 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 261
    Points : 21 665
    Points
    21 665
    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
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre habitué Avatar de oneDev
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2019
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2019
    Messages : 146
    Points : 167
    Points
    167
    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
    12 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 261
    Points : 21 665
    Points
    21 665
    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 .
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre habitué Avatar de oneDev
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2019
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2019
    Messages : 146
    Points : 167
    Points
    167
    Par défaut
    Je ferais de nouveaux tests la semaine prochaine.
    Je te remercie de tes réponses.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    13 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 13 229
    Points : 35 947
    Points
    35 947
    Billets dans le blog
    54
    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
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  9. #9
    Membre habitué Avatar de oneDev
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2019
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2019
    Messages : 146
    Points : 167
    Points
    167
    Par défaut
    Bonjour,

    J'avais placé la dll dans le dossier debug de mon appli de test.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    13 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 13 229
    Points : 35 947
    Points
    35 947
    Billets dans le blog
    54
    Par défaut
    Ok, mais quand on utilise le mode Debug de l'IDE la recherche de la bibliothèque (32 bits) se fait dans Syswow64.
    A contrario si on lance l'exe du dossier debug c'est bien la dll du dossier qui sera prise en compte (enfin je crois, DBexpress n'est pas ma tasse de thé )
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  11. #11
    Membre habitué Avatar de oneDev
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2019
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2019
    Messages : 146
    Points : 167
    Points
    167
    Par défaut
    Bien noté, je ferais de nouveaux tests, je vous dirais ce que cela donne.
    Merci.

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, 15h38
  2. Probleme Firebird et DBExpress de DELPHI XE3
    Par kaouane dans le forum Firebird
    Réponses: 3
    Dernier message: 31/01/2015, 22h31
  3. installer DBexpress sous delphi 6 personnel édition
    Par Ice-tea dans le forum Delphi
    Réponses: 1
    Dernier message: 02/06/2006, 12h01
  4. Réponses: 3
    Dernier message: 29/06/2005, 14h56
  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, 12h06

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