Vous êtes sur la page 1sur 22

Programmation Delphi Cyril Beaussier

Dbuter avec l'ADO


Version 1.0b Septembre 2003 pour Developpez.com

COPYRIGHT ET DROIT DE REPRODUCTION

Ce support est libre de droit pour une utilisation dans un cadre priv ou non commercial. Vous n!avez pas l"autorisation de le modi#ier sans l!autorisation crite de son auteur. $oute mise % disposition du support sur un autre site &ue Developpez.com est interdite. Pour un usage dans un but commercial' reportez(vous au) conditions d!utilisation % l!adresse * +++.beaussier.com,-pg.condition Si vous souhaitez des am liorations' /e suis videmment ouvert % toute suggestion. 0l en est de m1me si vous constatez une erreur 2nul n!est par#ait 3. Pour cela' il su##it de m! crire avec pour su/et 4 Programmation Delphi / Dbuter avec l'ADO 5 dans la rubri&ue 4 Contact 5 de mon site principal * +++.beaussier.com 6es mar&ues et noms de soci t cit s dans ce support sont d pos es par leurs propri taires respecti#s. Delphi est la propri t e)clusive de 7896:;D. <indo+s et :CC=SS sont la propri t e)clusive de >icroso#t Corporation. ?e ne suis li avec aucun diteur ou constructeur in#ormati&ue. Ce support a t r alis avec la suite bureauti&ue libre Open Office 1.1 2disponible gratuitement sur http*,,#r.openo##ice.org3 :vertissement compl mentaire * 6es l ments 2donn es ou #ormulaires3 ventuellement inclus dans ce support vous sont #ournis % titre d!e)emple uni&uement. 6eur utilisation peut avoir' dans certains cas' des cons &uences mat riels et /uridi&ues importantes &ui peuvent varier selon le su/et dont ils traitent. 0l est recommand d!1tre assist par une personne comp tente en in#ormati&ue ou de consulter un conseiller /uridi&ue ou #inancier avant de les utiliser ou de les adapter % votre activit .

2,22

Sommaire
1. INTRODUCTION....................................................................................................................................4 1.1. @; >8$ S@9 6":D8............................................................................................................................. A 1.2. 60>0$= D@ S@PP89$.................................................................................................................................A 2. PRSENTATION.................................................................................................................................... 5 3. PARTIE SERVEUR................................................................................................................................ 6 3.1. 7:S= D= D8;;B=S.................................................................................................................................. C 3.2. C8;;=D08; .......................................................................................................................................... E 4. PARTIE C IENT.................................................................................................................................... ! A.1. S$9@C$@9= D= 6":PP60C:$08;.................................................................................................................. F A.2. 0;$=9G:C= @$060S:$=@9.........................................................................................................................10 A.3. 6: C8@CH= :D8................................................................................................................................11 A.A. :CCIS :@D D8;;B=S............................................................................................................................ 1C A.J. :GG0CH:K= D=S D8;;B=S.......................................................................................................................1E A.C. >8D0G0C:$08; D=S D8;;B=S.................................................................................................................. 1L 5. A" IORATION................................................................................................................................. 2# 6. CONC USION...................................................................................................................................... 22

3,22

1. Introduction
Ce support traite de l!accMs % une base de donn es >S(:ccess depuis Delphi. :Nant d marr d but 2003 sous cet :K6' /!ai eu tout de suite besoin de d velopper ce tNpe d"application. Vous trouverez donc % travers ces pages' un didacticiel traitant de mon e)p rience sur ce su/et. Vous n!avez pas besoin de connaOtre le Pascal 8b/et 2le langage de Delphi3 car vous allez d couvrir &u!avec la puissance des composants :D8' il n!N a presque pas besoin de programmer. 1.1. Un mot sur lADO 6":D8 &ui signi#ie en clair 4 :ctiveD Data 8b/ects 5' est un sNstMme d"accMs au) donn es purement >icroso#t dit de haut niveau. C"est(%(dire &ue la comple)it de la conne)ion et des op rations de lecture criture est mas&u e pour le d veloppeur &ui l"utilise. 6e sNstMme :D8 a donc l" norme avantage' si vous d sirez vous connecter % des bases >icroso#t comme :ccess ou SP6,Server' d"avoir ses bibliothM&ues en standard sur la plupart des versions r centes de <indo+s 2FL,2000,DP3. Ce &ui #acilite le d ploiement en clientMle de vos applications. N$%e & Pour des versions <indo+s comme FJ ou ;$' vous aurez probablement besoin d"avoir recours au moteur :D8 &ui est distribu sous la #orme du >D:C 2reportez(vous au chapitre 3.2. Conne ion3. 1.2. Limite du support Pour une bonne compr hension de ce support 2avec notamment les copies cran3' /e pars du principe &ue vous utilisez Delphi dans sa version E et >S(:ccess dans une version FE minimum. 6a version de <indo+s n"a pas d"importance bien &ue mon ordinateur soit sous une anti&ue version FLS=. =n revanche' assurez(vous de disposer d!un pa&uetage >D:C sur votre ordinateur. 9eportez(vous pour cela au chapitre 3.2. Conne ion

A,22

2. Prsentation
:#in de rester le plus simple possible' /e d crirai dans ce document' une architecture en mode client,serveur avec le sNstMme de gestion de base de donn es de >icroso#t :ccess. =n e##et' >S(:ccess est certainement le SK7D le plus simple % mettre en place puis&u!il ne n cessite pas de serveur d di et &u!il peut 1tre install sur la m1me machine &ue le programme client. Du cQt de Delphi' nous avons % notre disposition un ventail de composants &ui vont nous permettre d"utiliser le mode de conne)ion :D8. C$'($sa)%
TADOConnection

Des*ri(%i$) Permet la conne)ion % la base et assure le support des transactions. S!utilise principalement pour e) cuter des commandes SP6 &ui ne renvoie pas d!ensemble de r sultats1. :ccMs au) tables de la base avec retour d"in#ormation possible. :ccMs phNsi&ue % une table avec retour d"in#ormation possible. Permet l"envoi de re&u1te SP6 avec retour d"in#ormation. =) cute les proc dures stocR es d"une base. Permet le trans#ert de donn es avec possibilit de triage.

TADOCommand

TADODataSet

TADOTable

TADOQuery

TADOStoredProc

TRDSConnection

1 6a documentation Delphi pr cise &u!avec la m thode =)ecute' un $:D8Command est capable de renvoNer un ensemble d!enregistrements. >ais pour l!utiliser' vous aurez besoin d!un composant ensemble de donn es :D8 distinct.

J,22

3. Partie serveur
;ous allons maintenant proc der au d veloppement d!une petite application. Celle(ci sera une gestion trMs simple d!un #ichier de clients et &ue nous appellerons... A+$Pri'$. 6"int gralit des sources est #ournie avec ce support dans le m1me pa&uetage. Vous avez les sources des programmes' le programme compil et la base de donn es :ccess. ?e vous encourage cependant' % ne vous en servir &u"en dernier recours. 3.1. Base de donnes D"abord' nous allons cr er la structure de notre base de donn es. 6"int r1t de >S( :ccess #ait &ue nous n"avons &u"un seul #ichier g n r . 6es tables comme les inde) sont en e##et int gr s dans le #ameu) . DB. ;otre base Clie)% se compose d!une table uni&ue du m1me nom et dont la structure est la suivante *
Client Id Nom Adr Cp Ville Tel

;um ro automati&ue ChaOne 2J03 ChaOne 22003 ChaOne 2J3 ChaOne 2J03 ChaOne 22J3

;um ro du client ;om du client :dresse Code postal Ville $ l phone

Pour bien #aire les choses' n"oublions pas les inde) sur les tables. 6a colonne Client.Id tant d clar e en tant &ue cl primaire' elle sera ainsi automati&uement inde) e2.

2 6a documentation >S(:ccess pr cise &u!un inde) est automati&uement cr tant &ue cl primaire.

sur un champ d clar en

C,22

3.2. !onne"ion 0l est courant pour tablir un point de conne)ion sur une base de donn es % travers l!:D8' de cr er ce &ue >icroso#t appelle un DS;3. >ais ce n!est pas obligatoire et cela tend % ralentir la conne)ion :D8. Donc dans ce support nous n!aborderons pas ce principe puis&u!avec Delphi' nous pouvons compl tement nous passer de cette tape. A )$%er & 0l ne #aut pas con#ondre le DS; et le D;S 2Domain !ame "erver3. Ce sont deu) choses complMtement di## rentes. 6!utilisation d!un DS; est utile notamment pour permettre % l!utilisateur de modi#ier lui( m1me le chemin d!accMs % la base >S(:ccess. 0l est cependant contraignant car il vous #audra cr er ce DS; sur cha&ue poste oS vous installerez votre application. V ri#iez &ue vous disposez bien de l!accMs 8D7C % >S(:ccess. Pour cela' allez dans le panneau de con#iguration <indo+s et lancez l!icQne de l!A+'i)is%ra%eur ODBC.

Dans l!onglet 4 Pilote 5' v ri#iez &ue le pilote 8D7C >icroso#t :ccess est install . S!il n!est pas dans la liste' vous devez $,li-a%$ire'e)% l!installer. 9eportez(vous sur le site de >icroso#t en tapant le mot cl "DAC pour obtenir le pa&uetage n cessaire. :ttention cependant % la version &ue vous t l chargez. 6e >D:C 2.E n!inclut pas par e)emple' le pilote O#$ D% &icrosoft 'et. Pr # rez une version 2.1.

3 :br viation anglaise de Data "ource !ame

E,22

#. Partie client
;ous allons maintenant passer % la programmation de notre application A+$Pri'$. Cr ez pour cela un dossier du m1me nom et dans le&uel nous allons mettre l!ensemble des #ichiers du pro/et. ;otre application va se construire en &uatre tapes trMs simples * 6a d #inition de l!inter#ace utilisateur avec la #iche principale. 6a mise en place des composants :D8 pour l!accMs au) donn es. 6a mise en place du composant d!inter#ace entre l!:D8 et l!inter#ace utilisateur. 6a mise en place des composants de gestion des donn es pour l!a##ichage et les op rations d! criture des donn es.

;ous allons ainsi avoir une hi rarchie de composants &ui nous permet d!a##icher et de modi#ier les donn es de notre table :ccess.

L,22

#.1. Structure de lapplication 6!application ne comporte &u!une seule #iche &ue nous appellerons .Pri'$ et uPri'$ pour son unit Pascal. @ne #ois Delphi lanc ' enregistrons notre #iche principale avec comme nom d"unit Pascal uPrimo et en changeant les propri t s suivantes pour la #iche * !ame pour 4 $Primo 5 Caption pour 4 %estion !lient ADO 5. =nregistrez en#in le pro/et sous le nom A+$Pri'$. Dans le menu Pro&et / Options' donnez une /olie icQne pour votre application.

F,22

#.2. Inter$ace utilisateur Pour &ue notre inter#ace soit agr able pour l!utilisateur' nous allons d!abord placer un composant Pa-eC$)%r$l sur la #iche. Pa-eC$)%r$l se trouve sur la palette des composants dans l!onglet (in32... @ne #ois le composant pos ' dimensionnez le pour &u!il tienne sur la totalit de la sur#ace de la #iche. Vous pouvez laisser le nom donn par d #aut PageControl)' cela n!a pas d!importance.

Dans la Vue ar,$res*e)%e +es $,/e%s' #aOtes un clic droit sur PageControl) et choisissez le menu 'ouvelle pa(e pour a/outer un onglet de #euille. 9enouvelez l!op ration une seconde #ois a#in d!obtenir deu) onglets attach s % PageControl) et nomm s respectivement *ab"heet) et *ab"heet2. Changez les propri t s !aption de ces deu) onglets pour T)ListeU et T)*ic+eU

Votre #iche doit maintenant ressembler % l!image ci(dessous *

10,22

#.3. La couc+e ADO ;ous allons maintenant utiliser les composants :D8. Ce sont eu) &ui vont assurer la conne)ion % la base de donn es >S(:ccess. Depuis la palette' placez un composant ADOC$))e*%i$) et un composant ADOTa,le.

;ous allons ensuite proc der au param trage de la chaOne de conne)ion a#in de d terminer le pilote de donn es % utiliser et le chemin d!accMs % la base. Depuis l!I)s(e*%eur +0$,/e%s' s lectionnez dans la liste votre composant ADOConnection). Double cli&uez sur la propri t Lo(inPrompt pour la mettre % *alse a#in de ne pas avoir de demande d!identi#ication utilisateur lors de la conne)ion % la base. Cli&uez sur le bouton de con#iguration de la propri t !onnectionStrin( 2comme illustr % gauche3.

11,22

6!:ssistant de conne)ion apparaOt. Cli&uez sur le bouton !onstruire.

S lectionnez le pilote
icroso$t ,et #.- OL. DB Provider.

Cli&uez sur le bouton 'e"t //

Ra((el & Si le pilote Gournisseur icroso$t ,et #.- OL. DB n!est pas dans cette liste' c!est &ue votre version de >D:C est certainement trop r cente.

12,22

: l! tape 1' s lectionnez votre base de donn es Clie)%.'+,. =n principe' vous 1tes d /% dans le bon r pertoire. : l! tape 2' inutile de supprimer le nom d!utilisateur 2+ser name3 * A+'i) si vous laissez cocher la case 4 7lanR pass+ord 5 2mot de passe vide3.

=n#in' cli&uez sur le bouton 0est !onnection pour v ri#ier &ue la conne)ion est correcte. =t en principe' vous devez voir s!a##icher *

13,22

Passons % notre composant ADO*able). $ou/ours depuis l!I)s(e*%eur +0$,/e%s' modi#iez les propri t s suivantes * 1. S lectionnez le composant ADOConnection) dans la liste de la propri t !onnection. 2. S lectionnez la table !lient dans la liste de la propri t 0a1le'ame. 3. Passez % la valeur 0rue dans la propri t Active. Vous devez maintenant en 1tre au m1me point &ue dans l!illustration de droite.

1A,22

Passez % nouveau dans la #en1tre Vue ar,$res*e)%e +es $,/e%s. GaOtes un clic droit sur le composant ADO*able) et s lectionnez le menu
.diteur de c+amps

@ne petite #en1tre s!ouvre comme ci(dessous.

Cette petite #en1tre va nous permettre d!ins rer les colonnes de la table !lient &ui vont nous servir ensuite pour l!a##ichage des donn es.

:ppuNez sur les touches !trl V A pour a##icher la liste des champs disponibles. Par d #aut' tous les champs de la table sont s lectionn s. =nlevez le champ Id &ui n!a pas besoin d!1tre a##ich puis&u!il s!agit de la *l1 (ri'aire de la table. Cli&uez sur le bouton O2 pour valider

Voil% notre couche :D8 est param tr e.

1J,22

#.#. Acc3s au" donnes ;ous allons utiliser un composant Da%aS$ur*e pour nous permettre de #aire le lien entre les composant :D8 d!accMs au) donn es et les contrQles d!a##ichage de donn es de notre #iche. Ce composant se trouve sur l!onglet A**2s BD

Comme pour les deu) composants :D8' placez le Da%aS$ur*e en haut % droite pour ne pas 1tre g1n . Dans l!E3(l$ra%eur +0$,/e%s' placez(vous sur Data"ource). >ettez(vous sur la propri t DataSet et s lectionnez dans la liste ADO*able). Votre Vue ar,$res*e)%e +es $,/e%s doit maintenant a##icher la hi rarchie des composants comme dans l!illustration ci(dessous.

1C,22

#.4. A$$ic+a(e des donnes Placez maintenant sur votre #iche et sur l!onglet is%e' un composant D%,ri-. :grandissez votre composant D%,ri-) au) dimensions ma)ima de l!onglet. Placez(vous dans l!E3(l$ra%eur +0$,/e%s et s lectionnez dans la propri t DataSource' le composant Data"ource).

6!a##ichage de vos donn es apparaOt alors dans la grille. N$%e & Pensez % r gler la largeur des colonnes de la grille en agissant sur la propri t 5idt+ depuis la Vue ar,$res*e)%e +es $,/e%s.

1E,22

#.6.

odi$ication des donnes

6e composant DB4ri+ est g n ralement utilis pour avoir une vision globale des enregistrements. 0l est en revanche peu prati&ue pour la modi#ication d!une ligne d!in#ormations. ;ous allons donc passer sur l!onglet 5i*6e de notre #en1tre pour cr er des champs sp ci#i&ues % cha&ue colonne et rendre plus ais la mise % /our. Dans la Vue ar,$res*e)%e +es $,/e%s' double cli&uez sur le composant ADO*able) pour #aire apparaOtre la #en1tre des champs. GaOtes alors glisser l!ensemble des champs sur la #iche comme dans l!illustration ci(dessous.

N$%e & Pensez % r gler la largeur des champs en agissant sur la propri t 5idt+ depuis l!I)s(e*%eur +0$,/e%.

1L,22

6!onglet Giche est &uand m1me peu prati&ue si l!on veut naviguer d!un enregistrement % un autre. De plus' il nous man&ue une #onction de cr ation et de suppression. ;ous allons r gler ce problMme avec le composant DBNa7i-a%$r disponible sur l!onglet C$)%r8le BD. Placez le comme sur l!illustration. ;!oubliez pas de s lectionner dans la propri t DataSource' votre composant Data"ource) sinon les boutons seront inacti#s.

N$%e & Vous pouvez galement param trer les boutons du composant DBNa7i-a%$r &ui seront ou non visibles dans votre #iche.

1F,22

4. Amlioration
;ous allons maintenant proc der % &uel&ues modi#ications de notre application pour &u!elle soit plus #acile d!utilisation. 6!a##ichage des donn es pour la navigation n!est pas trMs ais e puis&u!il s!agit du classement par le champ Id. ;ous allons donc param trer le composant ADO*able) pour &u!il e)traie les donn es dans l!ordre alphab ti&ue des noms de client. Dans l!E3(l$ra%eur +0$,/e%' placez(vous sur la propri t Inde"*ield'ames. Saisir dans le champ' la colonne sur la&uelle on doit trier les enregistrements 2pour notre e)emple * 'om3.

20,22

;ous allons en#in e)traire la chaOne de conne)ion du composant ADOConnection) pour l!inclure directement dans le code d!ouverture de la #iche. GaOtes un couper , coller du contenu de la propri t !onnectionStrin( et placez le code suivant dans la proc dure de cr ation de la #iche.
procedure TfPrimo.FormCreate Sender! TOb"ect#$ var c%emin&D' c%aineCn( ! string$ begin c%emin&D !) *C!+Pro,ram File-+&orland+Delp%i.+Pro"ect-+* / *AdoPrimo+Client.mdb*$ c%aineCn(!) *Pro0ider)1icro-oft.2et.O34D&.5.6$* / *7-er ID)Admin$* / *Data Source)* / c%emin&D / *$* / *1ode)S%are Deny None$4(tended Propertie-)88$* { Toutes les lignes qui suivent sont inutiles la connexion. Vous pouvez les enlever. Jet Jet Jet Jet Jet Jet Jet Jet Jet Jet Jet Jet Jet OLEDB:Syste !ata"ase#$$% OLEDB:&egistry 'at(#$$% OLEDB:Data"ase 'ass)or!#$$% OLEDB:Engine Type#*% OLEDB:Data"ase Loc+ing ,o!e#-% OLEDB:.lo"al 'artial Bul+ Ops#/% OLEDB:.lo"al Bul+ Transactions#-% OLEDB:0e) Data"ase 'ass)or!#$$% OLEDB:1reate Syste Data"ase#2alse% OLEDB:Encrypt Data"ase#2alse% OLEDB:Don3t 1opy Locale on 1o pact#2alse% OLEDB:1o pact 4it(out &eplica &epair#2alse% OLEDB:S2'#2alse

ADOConnection9.ConnectionStrin, !) c%aineCn( $ ADOTable9.Acti0e !) True$ end$

N$%e & Pour viter d!avoir % recompiler le programme % cha&ue d placement phNsi&ue de la base :ccess' il serait plus prati&ue de mettre la variable c+eminBD dans un #ichier I'I ou dans la base de registre. 7ien sWr comme la chaOne de conne)ion est vide' les composants n!a##ichent plus les donn es. 9assurez(vous % l!e) cution du programme' tout est normal.

21,22

6. !onclusion
Voil% votre application est pr1te. 0mpressionnant &uant au temps de d veloppement puis&u!il m!a #allu % peine 30 minutes pour la #aire. Ceci n!est &u!une introduction % la compr hension et la programmation sous Delphi d!une petite application :D8 sans avoir besoin de recourir au langage Pascal 8b/et. ?e vous invite % t l d charger la suite intitul e 4 6a conne)ion :D8 PremiMre application 5. Ce second manuel vous permettra de poursuivre votre apprentissage avec une application beaucoup plus complMte. Pour plus d!in#ormation' reportez(vous % l!adresse suivante * +++.beaussier.com,-pg.doc

22,22