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 :

Créer un driver ODBC


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut Créer un driver ODBC
    Bonjour!

    Je cherche à créer, à l'aide de Dlphi 7, un driver ODBC pour accéder à diverses données propriétaires. J'ai beau effectuer des recherches sur le net, je ne trouve pas de point de départ.

    Quelqu'un a une idée ?

    Merci!

    -Slimjoe
    -Slimjoe

  2. #2
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Chez www.techvanguards.com ils ont un kit "OPTK" qui sertà faire des pilotes OLE DB. Ce n'est pas de l'odbc mais tu peux très bien créer un pilote OleDB pour tes données. C'est plus moderne et d'une et de deux tu peux utiliser ADO pour dialoguer avec ton pilote OleDB.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut création ODBC
    Bien sur, OLE est plus moderne que ODBC... Mais si tu as VRAIMENT besoin de créer un driver ODBC par prog. , tu dois utiliser une API Microsoft:
    SQLConfigDataSource
    Voici un long exemple d'une appli console qui crée un DSN SQLServer
    Si tu veux d'autres types de DSN va sur le site http://www.connectionstrings.com/
    où ils décrivent les différentes chaînes de connexion odbc en fonction du serveur SQL.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    program CreationDSNSqlServer;
    {$APPTYPE CONSOLE}
    uses
      sysutils;
     
    Const
    ODBC_ADD_DSN = 1;
    ODBC_CONFIG_DSN = 2;
    ODBC_REMOVE_DSN = 3;
    ODBC_ADD_SYS_DSN = 4;
    vbAPINull = 0;
    DriverSQLServer:AnsiString='SQL Server';
     
    function SQLConfigDataSource (hwndParent : Integer; fRequest : Longint;
             lpszDriver : AnsiString;
             lpszAttributes : AnsiString): Longint;stdcall;external 'ODBCCP32.DLL' name 'SQLConfigDataSource' ;
     
     
     
    Var
    i:integer;
    StrAttributes:AnsiString;
    NbParam,CodeRetour:Integer;
    msg:PChar;
    begin
         // 1er paramètre: Nom de la source de données ODBC
         // 2ème paramètre: Adresse du server (IP ou nom du PC)
         // 3ème paramètre: Nom de la base de données
     
         // remarque: il ne sert à rien de saisir un nom d'utilisateur ici, car on doit le saisir à chaque connexion par ODBC
         // un code retour est renvoyé. Il doit être différent de 0 pour que le paramétrage se soit bien passé.
         //Voir le site http://www.connectionstrings.com/ pour le détaiol des chaînes de connexion existantes
     
         If ParamCount<>3 then
         begin
              Writeln&#40;'Usage&#58; creationDsn NomDeLaSourceDeDonnées AdresseServeur NomBd'&#41;;
              Halt&#40;0&#41;;
         end
         else
         begin
     
               StrAttributes&#58;='DSN='+ParamStr&#40;1&#41;+#0;
               StrAttributes&#58;=StrAttributes+'Server='+ParamStr&#40;2&#41;+#0;
               StrAttributes&#58;=StrAttributes+'Database='+ParamStr&#40;3&#41;+#0;
               StrAttributes&#58;=StrAttributes+'Trusted_Connection=yes'+#0;
     
               //cette ligne est dans le cas ou l'authentification se fait par WinNT
               //StrAttributes&#58;=StrAttributes+'Trusted_Connection=yes'+#0;
     
               CodeRetour&#58;=SQLConfigDataSource&#40;vbApiNull,ODBC_ADD_SYS_DSN,DriverSQLServer,StrAttributes&#41;;
               if coderetour<>0 then
                  Writeln&#40;'OK'&#41;
               else
                   writeln&#40;'Problème, modifs non effetuées '+inttostr&#40;CodeRetour&#41;&#41;;
     
     
               Halt&#40;CodeRetour&#41;;
         end;
     
     
    end.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Voir la FAQ
    On en parle aussi dans la FAQ, avec une autre méthode.
    http://delphi.developpez.com/faq/?page=odbc

  5. #5
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut Re: Voir la FAQ
    Citation Envoyé par sbeu
    On en parle aussi dans la FAQ, avec une autre méthode.
    http://delphi.developpez.com/faq/?page=odbc
    euh...
    Merci, mais j'ai besoin de CRÉER un driver et non de recenser une source.

    Je connaissais déjà la FAQ à ce propos en m'en suis d'ailleurs servi il y a quelques mois.

    Merci quand même!


    Citation Envoyé par merlin
    Chez www.techvanguards.com ils ont un kit "OPTK" qui sertà faire des pilotes OLE DB. Ce n'est pas de l'odbc mais tu peux très bien créer un pilote OleDB pour tes données. C'est plus moderne et d'une et de deux tu peux utiliser ADO pour dialoguer avec ton pilote OleDB.
    Merci merlin. Je vais voir ça immédiatement!

    -Slimjoe
    -Slimjoe

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut
    euh... Confused
    Merci, mais j'ai besoin de CRÉER un driver et non de recenser une source.
    Dans mon code exemple, tu as la CREATION d'un driver ODBC

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par sbeu
    euh... Confused
    Merci, mais j'ai besoin de CRÉER un driver et non de recenser une source.
    Dans mon code exemple, tu as la CREATION d'un driver ODBC
    Désolé sbeu je suis un peu confus... Remarque que je n'ai pas testé le code (je n'ai pas accès à Delphi présentement) mais je ne vois pas comment la fonction SQLConfigDataSource pourrait créer un driver.

    Peut-être aussi m'ai-je mal exprimé: je cherche à construire un driver à partir de zéro (où à partir d'un kit de développement, merci merlin ) pour accéder à des données que les drivers existants ne peuvent pas. Je ne cherche pas à extraire des données d'Access, de mySQL ou de Excel mais de fichiers binaires propriétaires et je voudrais en bout de ligne être capable d'exécuter des requêtes SELECT, UPDATE, INSERT, DELETE sur ces données.

    Dans ton exemple code, je vois qu'il est possible de créer une source ODBC mais je ne vois pas comment créer le pilote.

    Il est toutefois possible que je me trompe (ça ne serait pas la première fois ).

    Merci!
    -Slimjoe

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut
    non non tu ne te trompes pas...
    J'avais pas compris la question. Je ne vais pas pouvoir t'aider sur ce problème... Bon courage!

  9. #9
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Le kit OleDB que j'ai indiqué permet de créer un pilote, c'est une chose, mais il ne permet pas de créer un moteur de base de données hein ! :-)
    Si tes fichiers propriétaires ne disposent pas d'un moteur SQL même en créant un pilote OleDB tu ne pourras pas exécter de SELECT ou autre.. qui va les interpréter et les exécuter ?
    Et franchement si tu veux te lancer dans l'écriture d'un interpréteur SQL, bon courage :-)

    En revanche, solution envisageable :
    Tu achètes le composant TxQuery qui lui est un interpréteur SQL qui marche sur des datasets quelconque. Dans ton pilote tu te débrouilles pour charger les données de tes fichiers propriétaires dans des TClientDataset par exemple, et quand une commande SQL est envoyée, ton pilote passe la main à TxQuery pour évaluer les données et retourner un TDataset résultat...

    Un peu délicat à mettre au point je pense, mais rien de très compliqué.

  10. #10
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Merlin
    Le kit OleDB que j'ai indiqué permet de créer un pilote, c'est une chose, mais il ne permet pas de créer un moteur de base de données hein ! :-)
    Si tes fichiers propriétaires ne disposent pas d'un moteur SQL même en créant un pilote OleDB tu ne pourras pas exécter de SELECT ou autre.. qui va les interpréter et les exécuter ?
    Et franchement si tu veux te lancer dans l'écriture d'un interpréteur SQL, bon courage :-)

    En revanche, solution envisageable :
    Tu achètes le composant TxQuery qui lui est un interpréteur SQL qui marche sur des datasets quelconque. Dans ton pilote tu te débrouilles pour charger les données de tes fichiers propriétaires dans des TClientDataset par exemple, et quand une commande SQL est envoyée, ton pilote passe la main à TxQuery pour évaluer les données et retourner un TDataset résultat...

    Un peu délicat à mettre au point je pense, mais rien de très compliqué.
    Effectivement, en testant on voit bien que ça fait un driver OLEDB assez facilement mais qu'il ne contient pas de parser SQL. Ça ne fait que la moitié de mon problème de réglé...

    Est-ce que TxQuery parse le SQL ? Je vérifie immédiatement...

    Merci !
    -Slimjoe

  11. #11
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Citation Envoyé par slimjoe
    Effectivement, en testant on voit bien que ça fait un driver OLEDB assez facilement mais qu'il ne contient pas de parser SQL. Ça ne fait que la moitié de mon problème de réglé...
    Est-ce que TxQuery parse le SQL ? Je vérifie immédiatement...
    tu as demandé le code d'un pilote ODBC pas celui de Oracle :-)
    un pilote ne sert qu'à interroger le _serveur_ de base de données qui est derrière, c'est un pont entre l'appli et la base. En anglais on appelle un un "middleware" à juste titre.

    En revanche TxQuery est un parseur et un exécuteur de SQL qui a la particularité d'être un composant Delphi écrit en Delphi. Du moment que tu as des Dataset sources, lui se débrouille pour exécuter SQL dessus.
    Donc dans ton cas, il faut "monter" des tables dans des TClientDataset en mémoire ou bien écrire ton propre descendant de TDataset qui sait lire ton format (ce qui serait bien si les fichiers sont gros, le TClientdataset stocke tout en ram lui).
    Ensuite tu recenses les datasets sources dans TxQuery et quand il exécute une requête il se dépatouille tout seul pour lire les datasets sources et retourner des données.

Discussions similaires

  1. [FIREBIRD]Drivers ODBC
    Par tripper.dim dans le forum Connexion aux bases de données
    Réponses: 10
    Dernier message: 24/04/2007, 12h02
  2. [Sage 100] Où trouver un driver ODBC ?
    Par Wasfi AG dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 14/03/2006, 11h49
  3. Drivers ODBC
    Par kevinss dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 31/03/2004, 15h32
  4. Driver ODBC pour interbase
    Par Houben Jacques dans le forum InterBase
    Réponses: 2
    Dernier message: 28/05/2003, 21h41
  5. URGENT DRIVER ODBC
    Par Casp dans le forum Débuter
    Réponses: 3
    Dernier message: 28/04/2003, 17h24

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