-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 1/12
ADOetVisualBasic:Tutoriel
I.AvantPropos
L'ensembleducodeetexplicationsquevoustrouverezdanscedocumentestbassurADOversion2.0etVisualBasic6.
VoustrouverezciaprsdesexemplesdeconnexionsauxbasesdedonnesAccess,Oracle,SQLServerainsiqu'uneexplicationsurlesobjetslespluscourrantsd'ADO.
II.Untourrapided'ADO
ADO(ActiveXDataObject)estuncomposantActiveXpermettantd'accderauxbasesdedonnesdefaonbeaucoupplusfacilesanssesoucierdetoutcequiestallocationdesenvironnementsdetravail(cf.programmationaveclacouchebassed'ODBC).ADOfournitdesobjetsquipermettentdeseconnecterunebaseetderaliserdesrequtesSQLsurcettebase.
PourpouvoirutiliserADOdansunprojetVisualBasicvousavezdeuxsolutionspouryparvenir:
lapremireestdecrerunProjetdedonneslasecondeestderajouterdanslemenuProjetsRfrences,MicrosoftAtiveXDataObjects2.xLibrary
ADOproposelesobjetssuivants:
Command:permetd'excuterdesrequtesConnection:connexionunesourcededonnes(aussibienunfichiertexte,qu'unfichierExcel,ouunebasededonnes)Error:ensembledeserreursretournesparleSGBDParameter:permetdedfinirunparamtred'unerequteRecordset:jeud'enregistrementsretournslorsdel'excutiond'unSELECT.
III.EtabliruneconnexionavecADOetl'objetConnection:
PourtabliruneconnexionunebasededonnesavecADO,onutilisel'objetConnection.VoustrouverezdanscechapitreunexempledeconnexionunebasededonnesAccess,OracleetSQLServer.
Uneconnexionunebasededonnessedfinitpar:
l'htesurlequelsetrouvelabasededonneslenomdelabasededonneslenomdel'utilisateurlemotdepasse.
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 2/12
L'ensembledeceschampsestappelchanedeconnexion.LeschampshteetnomdelabasededonnespeuventsoittredfinisdansleprogrammesoitdansunDSN(DataSourceName).UnDSNseconfiguredanslepanneaudeconfigurationavecl'outilSourcededonnes(ODBC).
Commentraliseruneconnexion?Toutd'abordilfautdclarerlavariableassocielaconnexion.
Slectionnez
DimcnxAsNewADODB.Connection
Oualors:
Slectionnez
DimcnxAsADODB.ConnectionSetcnx=NewADODB.Connection
L'tapesuivanteconsistecrirelachanedeconnexion.Commeilatvuprcdemment,ilexistedeuxpossibilitssoitenutilisantunDSNsoitenmettantlesinformationsncessairesdanslachanedeconnexion.
IIIA.ConnexionunebasededonnesAccesssansDSNSlectionnez
'DclarationdelavariabledeconnexionDimcnxAsADODB.ConnectionSetcnx=NewADODB.Connection
'Dfinitiondupilotedeconnexioncnx.Provider="Microsoft.Jet.Oledb.3.51"'Dfinitiondelachanedeconnexioncnx.ConnectionString="C:\maBase.mdb"'Ouverturedelabasededonnescnx.Open
Lepilote3.51permetd'accderAccess95et97.PourAccess2000,ilfaututiliserlaversion4.0.
IIIB.ConnexionunebasededonnesSQLServersansDSNSlectionnez
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 3/12
'DclarationdelavariabledeconnexionDimcnxAsADODB.ConnectionSetcnx=NewADODB.Connection...
'Dfinitiondelachanedeconnexioncnx.ConnectionString="UID="&NomUtilisateur&";PWD="&MotDePasse&";"&"DRIVER={SQLServer};Server="&NomServeur&";Database="&NomBaseDeDonnes
'Ouverturedelabasededonnescnx.Open
Commevousavezpuleconstater,iln'yapaslalignecnx.Provider.Eneffetdanscetexemplelepiloteutiliserestdcritdanslachanedeconnexion:DRIVER={SQLServer}.
IIIC.ConnexionunebasededonnesOraclesansDSNSlectionnez
'DclarationdelavariabledeconnexionDimcnxAsADODB.ConnectionSetcnx=NewADODB.Connection...
'Dfinitiondelachanedeconnexioncnx.ConnectionString="UID="+NomUtilisateur&";PWD="&MotDePasse&";"&"DRIVER=msdaora;Server="&NomServeur&";Database="&NomBaseDeDonnes
'Ouverturedelabasededonnescnx.Open
VousavezpuvoirdeschanesdeconnexionaveccommeDRIVER{MicrosoftODBCforOracle}.Cecimarchemaisn'estpastrsrecommand.
IIID.ConnexionunebasededonnesavecunDSNSlectionnez
'DclarationdelavariabledeconnexionDimcnxAsADODB.ConnectionSetcnx=NewADODB.Connection...
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 4/12
'Dfinitiondelachanedeconnexioncnx.ConnectionString="DSN="&NomDuDSN&";UID="&NomUtilisateur&";PWD="&MotDePasse&";"
'Ouverturedelabasededonnescnx.Open
DanslecasoilyaleDSN,vousn'avezplusbesoindespcifierl'htesurlequelsetrouvelabasededonnesainsiquelenomdelabasededonnes.
Pourfinircettepartie,voiciunepetitefonctiondeconnexionavecDSN:
Slectionnez
'==================================================================='AUTHOR:DrQ'FUNCTION:InitConnection(...)'DESCRIPTION:Initiliaselaconnexionlabasededonnes'PARAMS:*DSN:NomduDSNassocilaconnexion'*UserName:Nomdel'utilisateur'*Password:Motdepassedel'utilisateur'VERSION:1.1'===================================================================PublicFunctionInitConnection(DSNAsString,UserNameAsString,PassWordAsString)AsBooleanDimqueryAsStringDimcnxStringAsStringDimRequeteOkAsBooleanDimmRstAsNewADODB.Recordset
InitConnection=False'InitialisationdelachainedeconnexionADOCnx.ConnectionString="DSN="&DSN&";"
'VrifiequelaconnexionestbienfermeIfADOCnx.State=adStateOpenThenADOCnx.CloseEndIfOnErrorGoToBadConnection'ConnexionlabasededonnesADOCnx.OpencnxString,UserName,PassWord,adAsyncConnect'AttentequelaconnexionsoittablieWhile(ADOCnx.State=adStateConnecting)DoEventsWend'Vrificationdeserreursdanslecasd'unemauvaiseconnexion
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 5/12
IfADOCnx.Errors.Count>0Then'AffichagedeserreursMsgBoxADOCnx.Errors.Item(0)InitConnection=FalseExitFunctionElseInitConnection=TrueEndIfExitFunction
BadConnection:IfADOCnx.Errors.Count>0Then'AffichagedeserreursMsgBoxADOCnx.Errors.Item(0)InitConnection=FalseExitFunctionElseMsgBoxerr.DescriptionEndIfEndFunction
IIIE.Quelquesinformationssupplmentairessurlespilotes
IIIE1.ListedespilotesODBCsansDSN
dBase
Slectionnez
Driver={MicrosoftdBASEDriver(*.dbf)};DriverID=277;Dbq=chemin\nombd.dbf;
MSAccess
Slectionnez
Driver={MicrosoftAccessDriver(*.mdb)};Dbq=chemin\nombd.mdb;Uid=NomUtilisateur;Pwd=MotDePasse;
MSSQLServer
Slectionnez
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 6/12
Driver={SQLServer};Server=NomDuServeur;Database=nombd;Uid=NomUtilisateur;Pwd=MotDePasse;
MSTextDrive
Slectionnez
Driver={MicrosoftTextDriver(*.txt;*.csv)};Dbq=chemin\;Extensions=asc,csv,tab,txt;PersistSecurityInfo=False;
MySQL
Slectionnez
Driver={mysql};database=nombd;server=NomDuServeur;uid=NomUtilisateur;pwd=MotDePasse;option=16386;
Oracle
Slectionnez
Driver={MicrosoftODBCforOracle};Server=ServeurOracle.schema;Uid=NomUtilisateur;Pwd=MotDePasse;
VisualFoxpro
Slectionnez
Driver={MicrosoftVisualFoxProDriver};SourceType=DBC;SourceDB=chemin\nombd.dbc;Exclusive=No;
IIIE2.ListedespilotesOLEDB
MSAccess
Slectionnez
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=chemin\nombd.mdb;UserId=NomUtilisateur;Password=MotDePasse;
MSSQLServer
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 7/12
Slectionnez
Provider=SQLOLEDB;DataSource=NomServeur;InitialCatalog=nombd;UserID=NomUtilisateur;Password=MotDePasse;
MSSQLServeravecuneadresseIP
Slectionnez
Provider=SQLOLEDB;DataSource=xx.xx.xx.xx,1433;NetworkLibrary=DBMSSOCN;InitialCatalog=dbname;UserID=NomUtilisateur;Password=MotDePasse;
MSTextDriver
Slectionnez
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=chemin;ExtendedProperties='text;FMT=Delimited'"
Oracle
Slectionnez
Provider=OraOLEDB.Oracle;DataSource=nombd;UserId=NomUtilisateur;Password=MotDePasse;
IV.Raliserdesrequtesavecl'objetRecordset
Commepourl'objetConnectionvousdevezcommencerpardclarerunevariabledetypeRecordset.
Slectionnez
DimrstAsNewADODB.Recordset
Oualors:
Slectionnez
DimrstAsADODB.RecordsetSetrst=NewADODB.Recordset
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 8/12
Unefoisceslignesdecodetapes,vouspouvezexcutervotrerequte.PourcelavousdevezutiliserlamthodeOpendel'objetRecordset.Cettemthodeprendenparamtre:
larequtelaconnexionsurlaquellevoussouhaitezexcuterlarequteletypeducurseur(jevousrenvoiedescoursdeSGBD)letypedeblocageletypederequte
L'ensembledeceschampssontfacultatifs,maisjevousconseilled'aumoinspasserlesdeuxpremiersparamtreslamthode.Celarendlecodeplusclair.Danslesexemplesquivontsuivrejen'utiliseraiquelesdeuxpremiersparamtres.Sivoussouhaitezplusd'informations,jevousrenvoiesurMSDNquiesttrsbiendocument.
Voiciunpetitexemple:
Slectionnez
'DclarationdesvariablesDimcnxAsADODB.ConnectionDimrstAsADODB.Recordset
'InstanciationdesvariablesSetcnx=NewADODB.ConnectionSetrst=NewADODB.Recordset
'Connexionlabasededonnescnx.ConnectionString="Provider="&PiloteDaccesAlaBaseDeDonnes&";DSN="&NomDuDSN&";UID="&NomUtilisateur&";PWD="&MotDePasse&"cnx.Open
'Excutiondelarequterst.Open"SELECTnom,prenom,adresseFROMClient",cnx
Unefoisl'Openexcut,l'ensembledesenregistrementsretournsparleSELECTsetrouventdansl'objetRecordset,icirst.
PouraccdercesenregistrementsvousdevezutiliserlechampField.ChaquechampFieldcontientunecolonne.Dansnotrecasnousenavons3numrotesde02.Vousavezdoncdeuxsolutionspouraccderunchamp.Prenonsl'exempleduchampprenom.Vousfaitesrst.Fields(1)oubienrst.Fields("prenom").Vousavezpuvoircertainementducodeavecrst(1)oubienrst("prenom"),c'estlammechose.Etouilesdveloppeurssontunpeufaignantsdsqu'ils'agitdetaperducodeo)
Accderunchampc'estbien,maispouvoirnaviguerdansl'ensembledesenregistrementsc'estmieux.Pourcela,ilexistedesmthodespermettantdelefaire:
MoveFirst:slectionnelepremierenregistrement
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 9/12
MoveLast:slectionneledernierenregistrementMoveNext:slectionnel'enregistrementsuivantMovePrevious:slectionnel'enregistrementprcdent.
Ilyadeuxpropritsdel'objetRecordsetconnatrepourlanavigationquisont:
BOF(BeginOfFile):estvraisil'objetRecordsetpointesurledbutd'enregistrementEOF(EndOfFile):estvraisil'objetRecorsetpointesurlafindel'enregistrement.
Voiciunexempledebouclepermettantdeparcourirunjeud'enregistrementetd'afficherlersultat.
Slectionnez
WhileNot(rst.EOF)MsgBoxrst("nom")&""&rst("prenom")&"habiteau"&rst("adresse")&"."rst.MoveNextWend
Ilarrivequecertainesfois,ilyestunproblmeavecl'objetRecordsetetilnepointepasaudbutdel'enregistrement.Doncpourremdierceproblmevouspouveztapezleslignessuivantesaprsavoireffectul'Open.
Slectionnez
rst.MoveLastrst.MoveFirst
Unefoisquevousn'utilisezplusleRecordset,pensezlefermeraveclamthodeClose.
Slectionnez
rst.Close
IlexisteuneautrepropritquipeuttreintressantequiestRecordCount.Ellevouspermetdesavoirlenombred'enregistrementsstocksdansl'objetRecordset.
VoiciunpetitexempledefonctionpouvantexcutertouttypederequtesviaunRecordset.
'============================================================================='
'FUNCTION:ExecSQL(...)
'DESCRIPTION:ExecuteunerequteSQL
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 10/12
'PARAMS:*query:Requteexcuter
'*rst:Variablepermettantdestockerlesenregistrements
Slectionnez
'============================================================================='PublicFunctionExecSQL(queryAsString,ByRefrstAsADODB.Recordset,ByRefcnxAsADODB.Connection)AsBoolean
'InitialisationduRecordSetIfrst.StateadStateClosedThenrst.Close
'OuvreunetransactionpournepasavoirraliserdecommitenfindetraitementADOCnx.BeginTrans
'Positionnelecurseurctclientrst.CursorLocation=adUseClient'VrifiequelaconnexionpasseestbonneSetrst.ActiveConnection=cnxOnErrorGoToErrHandle'Excutelarequterst.Openquery,ADOCnx'ValidelatransactionADOCnx.CommitTransExecSQL=TrueExitFunction
ErrHandle:ExecSQL=FalseMsgBox"ADOManager.ExecSQL:ErrHandle"&vbCr&vbCr&err.Description,vbCriticalEndFunction
V.Raliserdesrequtesavecl'objetCommand
Commepourlesautresobjets,vousdevezcommencerpardclarerunevariabledetypeCommand.
Slectionnez
DimrstAsNewADODB.Command
Oualors:
Slectionnez
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 11/12
DimrstAsADODB.CommandSetrst=NewADODB.Command
L'objetCommandestunpeupluscomplexequeleRecordsetquoique.L'avantagedel'objetCommandparrapportl'objetRecordsetestdepouvoirfacilementparamtrerlesrequtesmmeslesSELECT.
Pourpouvoirutiliserdesrequtesparamtrablesilfaututiliserlesymbole?danslarequteSQLpuisrajouterunobjetParameterl'objetCommand.
Pourtreplusclairvoiciunexemple:
Slectionnez
'DclarationdesvariablesDimcnxAsADODB.ConnectionDimcmdAsADODB.CommandDimprm1AsADODB.ParameterDimrstAsADODB.Recordset
'InstanciationdesvariablesSetcnx=NewADODB.ConnectionSetcmd=NewADODB.CommandSetprm1=NewADODB.ParameterSetrst=NewADODB.Recordset
'Connexionlabasededonnescnx.ConnectionString="Provider="&PiloteDaccesAlaBaseDeDonnes&";DSN="&NomDuDSN&";UID="&NomUtilisateur&";PWD="&MotDePasse&"cnx.Open
'Prparationdel'objetCommandcmd.CommandText="SELECT*FROMClientWHEREnom=?"
'Prparationduparamtreprm1.Name="nom"'Nomduchampcorrespondantprm.Type=adVarChar'Typeduchampprm.Direction=adInput'Typedeparamtre:Entre,Sortie,Entre/Sortieprm.Size=40'Taillemaximaleduchampprm.Value="Dupond"'Valeurduparamtre
'ExcutiondelarequteSetrst=cmd.Execute
Commevousavezpuleremarquer,j'aiutilisunRecordsetdanscetexemple.VoiciunefaondercuprerlesenregistrementsretournsparunSELECT.L'objetRecordsetn'estncessairequedanslecasd'unSELECT.Danslesautrescasvouspouveztapperjustecmd.Execute.LamthodeExecutedel'objetCommandpeutprendretroisparamtresquisontfacultatifs:
-
17/2/2015 ADOetVisualBasic:Tutoriel
http://drq.developpez.com/vb/tutoriels/ADO/ 12/12
lepremierestlenombred'enregistrementsaffectsparlarequte.IlestdetypeLongledeuximeestuntableaudeVariantcontenantlesparamtresdelarequteSQLletroismeindiqueletypedevaleurquelefournisseurdoitattribuerlapropritCommandText.
LapropritCommandTextcontientlarequteexcuter.apeuttreunerequtestandardcommeunerequtedemodificationdel'architectured'unetableoudelabasededonnes.
VI.Remarque
Ilesttoutfaitpossiblequ'ilyaitdeserreursdansledocument.Sivousentrouvez,oubiensouhaitezunpeuplusd'explicationsurcertainspoints,veuillezm'envoyerunmailafindemettrejourl'ensembledecedocument.D'avancemerci.
Pourconclurecechapitre,j'aijusteunedernirechosevoussignaler.DanslecasovousutilisezlesobjetsParameterfaitesattentionfairelesAppenddevosparamtresdanslemmeordrequeles?danslarequteSQL.