Utilisation d'ADO avec Delphi dition personnelle. La version tlchargeable de ce document est disponible ici : AdoDelphiPerso.zip version HTML
Introduction...................................................................................................................................................................3 I - Connexion ODBC avec DSN..................................................................................................................................4 I.1 - Qu'est-ce que ODBC?....................................................................................................................................4 I.2 - Qu'est-ce qu'un DSN ?................................................................................................................................... 4 I.3 - Exemple de connexion ODBC une base donnes Access 2000................................................................ 4 I.3.A - Importer la bibliothque ADO................................................................................................................ 4 I.3.B - Cration de l'unit DSN......................................................................................................................... 5 I.3.C - Unit Principale du programme.............................................................................................................7 I.3.D - Procdure pour l'affichage des donnes dans la grille......................................................................... 7 I.3.E - Bouton Crer et Remplir la grille...........................................................................................................8 II - Connexion ADO directe......................................................................................................................................... 9 II.1 - Exemple de connexion ADO une base donnes Access 2000................................................................. 9 II.1.A - Importer la bibliothque ADO............................................................................................................... 9 II.1.B - Dclaration des variables publiques.....................................................................................................9 II.1.C - Bouton Crer et Remplir la grille..........................................................................................................9 III - Source des exemples......................................................................................................................................... 11
-2Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
Introduction
L'dition personnelle de Delphi6 ou Delphi7 n'inclus pas les composants d'accs aux donnes de type ADO. (ActiveX Data Objects) Je ne m'tendrai pas sur ce qu'est ADO, il existe d'autres tutoriaux qui l'expliquent beaucoup mieux que je ne saurais le faire. En rsum, ce sont des composants universels d'accs aux donnes de tous types Ce cours ne constitue qu'un complment sur l'utilisation d'ADO, destin aux utilisateurs de Delphi dition personnelle. Nous supposerons donc que vous savez ce qu'est un recordset. (jeu d'enregistrements), une chane de connexion, un objet Command. Dans le cas contraire je vous invite auparavant lire les autres cours de ce site sur l'accs aux bases de donnes avec ADO : Dbuter avec ADO en Delphi(par Cyril Beaussier) Programmer ADO en Delphi(par J-M. Rabilloud)
Mme si l'on ne dispose pas de ces composants, il est tout fait possible de raliser une connexion une base de donnes moyennant quelques petites manipulations et un peu de code, et d'utiliser les Recordsets ADO Ce tutorial vous permettra de vous connecter une base de donnes Access (mais ceci reste un exemple) de 2 faons diffrentes avec Delphi Perso (test avec Delphi6 et Win2000) par la technologie ODBC et DSN par une connexion ADO directe
(Exemples tests avec Delphi6, Win2000 et ADO 2.5, 2.6 et 2.7) (tests avec Delphi7 et WinME par Nono40)
-3Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
I.3 - Exemple de connexion ODBC une base donnes Access 2000 I.3.A - Importer la bibliothque ADO
NOTE : Cet exemple ne s'applique qu'aux systmes d'exploitation Microsoft Windows. Si ce n'est pas dj fait, vous devez en premier lieu installer les composants d'accs aux donnes de Microsoft (petite entorse Borland, ncessaire pour le fonctionnement du projet). Si vous ne l'avez pas, tlcharger MDAC_TYP.EXE [5Mo] sur le site de Microsoft. Ouvrez un nouveau projet Delphi Si l'installation de Mdac_typ s'est correctement effectue, dans l'onglet Projet et Importer une bibliothque de type , vous devez trouver :
-4Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
Procder l'importation en cliquant Crer l'unit , l'unit ADODB_TBL est cre. Vous devez alors l'ajouter votre projet, onglet Projet et Ajouter au projet ... Dfinissez ensuite votre interface (un exemple est donn dans les codes sources disponibles la fin de cet article)
Dclaration de la fonction externe pour accder la configuration des DSN. Cette fonction appartient a la librairie ODBCCP32.dll du gestionnaire ODBC.
function SQLConfigDataSource (hwndParent : hwnd; fRequest : Longint; lpszDriver : AnsiString; lpszAttributes : AnsiString) : Longint; -5Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
Utilisation d'ADO avec Delphi dition personnelle par Thierry AIM stdcall; external 'ODBCCP32.DLL' name 'SQLConfigDataSource' ;
Dfinition de la fonction pour la cration d'un DSN. Cette fonction ncessite en paramtres : DSNDriver : Nom du driver utilis (dans notre cas, il s'agira du driver Access ) DSNName : Nom du DSN (c'est le nom que l'on va retrouver dans la liste du gestionnaire ODBC) DSNDescription : Une brve description de notre DSN (non necessaire au fonctionnement) DSNdb : Le nom (et ventuellement le chemin complet) de la base de donnes laquelle on veut se connecter
class function FctDSN.Create(DSNDriver : AnsiString; DSNName: AnsiString; DSNDescription: AnsiString; DSNbd: AnsiString) :Longint; var intRet : longint ; DSNAttributes: AnsiString ; begin DSNAttributes := 'DSN=' + DSNName + #0 ; DSNAttributes := DSNAttributes + 'DESCRIPTION=' + DSNDescription + #0 ; DSNAttributes := DSNAttributes + 'DBQ=' + DSNbd + #0 ; intRet :=SQLConfigDataSource(vbAPINull, ODBC_ADD_DSN, DSNDriver, DSNAttributes); If intRet = 0 Then Showmessage( 'Echec de cration du DSN') ; Result := intRet; end;
Dfinition de la fonction pour la suppression d'un DSN. Cette fonction ncessite en paramtres : DSNDriver : Nom du driver utilis (dans notre cas, il s'agira du driver Access ) DSNName : Nom du DSN (c'est le nom que l'on va retrouver dans la liste du gestionnaire ODBC)
class function FctDSN.Remove(DSNDriver : AnsiString; DSNName : AnsiString):Longint; var intRet : longint ; DSNAttributes: AnsiString ; begin DSNAttributes := 'DSN=' + DSNName + #0 ; intRet := SQLConfigDataSource(vbAPINull, ODBC_REMOVE_DSN, DSNDriver, DSNAttributes) ; If intRet = 0 Then Showmessage ('Echec de suppression du DSN') ; Result := intRet; End;
Dfinition de la fonction pour la modification d'un DSN. Cette fonction ncessite en paramtres : hwnd : Handle de la fentre appelante DSNDriver : Nom du driver utilis (dans notre cas, il s'agira du driver Access ) DSNName : Nom du DSN (c'est le nom que l'on va retrouver dans la liste du gestionnaire ODBC)
class function fctDSN.Modify(hwnd : Longint; DSNDriver : AnsiString; DSNName : AnsiString): Longint; var intRet : longint ; DSNAttributes: AnsiString ; begin DSNAttributes := 'DSN=' + DSNName + #0 ; intRet :=SQLConfigDataSource(hwnd, ODBC_CONFIG_DSN, DSNDriver, DSNAttributes) ; Result := intRet; end;
-6Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
Utilisation d'ADO avec Delphi dition personnelle par Thierry AIM end.
Nom du driver ODBC utiliser. Si vous ne le connaissez pas, vrifiez dans le gestionnaire ODBC si votre driver existe et, si oui, trouvez son nom. Pour notre exmple nous utiliserons le driver pour Access.
DSNName = 'MS Access Delphi6';
Nom du DSN (qui appraitra dans le gestionnaire ODBC) C'est le nom sous lequel sera reconnu votre DSN pour votre application.
DSNDescription = 'Demo DSN ADO';
Description succincte du DSN. Une chane de caractre qui identifie plus prcisment votre DSN. Cette valeur n'est qu'une indication et n'a pas de fonctionnalit.
SQL = 'SELECT * FROM Outils';
Requte de slection. Une requte SQL classique, compatible avec le moteur Microsoft Jet.
DSNbd = 'bd1.mdb';
Nom de la base de donnes (si celle-ci ne se trouve pas dans le rpertoire de l'application, indiquer le chemin complet).
-7Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
Cette procdure est incluse dans le code source, vous pouvez bien sur la personnaliser loisir, en fonction de vos inspirations
Crer un DSN pour la liaison ODBC. Nous utilisons la fonction de cration que nous avons dfinie dans l'unit DSN
try FctDSN.Create (DSNDriver, DSNName, DSNDescription, DSNbd);
En cas d'erreur, vous tes renvoyer dans la partie except de l'instruction : vrifiez votre paramtrage dans les constantes ou dans vos variables. Crer un objet Recordset vide
OleCheck(CoCreateInstance(CLASS_RecordSet, nil, CLSCTX_ALL, IID__RecordSet, RS)); DSNstrg := 'DSN=' + DSNName;
-8Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
II.1 - Exemple de connexion ADO une base donnes Access 2000 II.1.A - Importer la bibliothque ADO
N'ayant pas besoin de crer un DSN, pour l'accs direct avec ADO, toute la diffrence rside dans la cration de la connexion la base de donnes. Je ne dtaillerai pas toutes les subtilits et paramtres des fonctionnalits d'ADO, un de mes confrre l'a dj fait, beaucoup mieux que je ne saurais le faire. Je vous engage une nouvelle fois lire les autres tutoriels de ce sites, afin de bien comprendre les mcanismes de ADO. Je rappelle que cet article ne constitue qu'un complment pour utiliser ADO avec une version personnelle de Delphi. Comme dans l'exemple prcdent, vous devez procder l'installation de Mdac_typ de Microsoft, importer la bibliothque ADO et l'ajouter votre projet. Vous n'avez pas besoin de l'unit DSN, dcrite dans le chapitre prcdent. Dans l'unit Main, la procdure d'affichage Display est rigoureusement identique celle dcrite ci-dessus.
Requte de slection, une requte SQL classique, compatible avec le moteur Microsoft Jet.
DSNbd = 'bd1.mdb';
Nom de la base de donnes (si celle-ci ne se trouve pas dans le rpertoire de l'application, indiquer le chemin complet)
Vous devez dfinir le provider (l'quivalent du driver utiliser dans la version avec DSN), ainsi que tous les paramtres ncessaires la connexion.
Cnx.Open( 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin; Data Source=bd1.mdb;', 'admin', '', -1 ); -9Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
Remplir le recordset
RS.CursorLocation := adUseServer; {localisation curseur cot serveur} RS.Open(Cmd, Emptyparam, adOpenKeyset, adLockOptimistic, adCmdText ); Display(RS); {Afficher les valeurs dans la grille} except On E:Exception Do ShowMessage('Erreur d''ouverture de la base.'+ #13+E.Message); end; end;
Ne pas oublier de fermer les objets ouverts avant de quitter l'application pour viter tous dboires collatraux :
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin RS.Close; Cnx.Close; end;
Voil, nous sommes arriv au terme de notre projet. Tlchargez les sources compltes ( la fin de cet article) Configurez les constantes dans l'unit Main et votre grille pour l'affichage en fonction de votre BD et testez.
- 10 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/
- 11 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Ccile MUNO (Khany). Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://thierryaim.developpez.com/tutoriel/adodelphiperso/