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
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
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.
///\\3rl1n_ (O.dahan)
Formation, Développement, Audit, C#, XAML, WPF, UWP, Xamarin
Dot.Blog restez au courant...
Microsoft MVP 2009-2019
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('Usage: creationDsn NomDeLaSourceDeDonnées AdresseServeur NomBd'); Halt(0); end else begin StrAttributes:='DSN='+ParamStr(1)+#0; StrAttributes:=StrAttributes+'Server='+ParamStr(2)+#0; StrAttributes:=StrAttributes+'Database='+ParamStr(3)+#0; StrAttributes:=StrAttributes+'Trusted_Connection=yes'+#0; //cette ligne est dans le cas ou l'authentification se fait par WinNT //StrAttributes:=StrAttributes+'Trusted_Connection=yes'+#0; CodeRetour:=SQLConfigDataSource(vbApiNull,ODBC_ADD_SYS_DSN,DriverSQLServer,StrAttributes); if coderetour<>0 then Writeln('OK') else writeln('Problème, modifs non effetuées '+inttostr(CodeRetour)); Halt(CodeRetour); end; end.
On en parle aussi dans la FAQ, avec une autre méthode.
http://delphi.developpez.com/faq/?page=odbc
euh...Envoyé par sbeu
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!
Merci merlin. Je vais voir ça immédiatement!Envoyé par merlin
-Slimjoe
-Slimjoe
Dans mon code exemple, tu as la CREATION d'un driver ODBCeuh... Confused
Merci, mais j'ai besoin de CRÉER un driver et non de recenser une source.
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.Envoyé par sbeu
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
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!
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é.
///\\3rl1n_ (O.dahan)
Formation, Développement, Audit, C#, XAML, WPF, UWP, Xamarin
Dot.Blog restez au courant...
Microsoft MVP 2009-2019
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é...Envoyé par Merlin
Est-ce que TxQuery parse le SQL ? Je vérifie immédiatement...
Merci !
-Slimjoe
tu as demandé le code d'un pilote ODBC pas celui de Oracle :-)Envoyé par slimjoe
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.
///\\3rl1n_ (O.dahan)
Formation, Développement, Audit, C#, XAML, WPF, UWP, Xamarin
Dot.Blog restez au courant...
Microsoft MVP 2009-2019
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager