ADO Et Visual Basic _ Tutoriel

Post on 20-Nov-2015

38 views 7 download

description

ADO et Visual Basic Tutoriel en PDF

Transcript of ADO Et Visual Basic _ Tutoriel

  • 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.