ADO Et Visual Basic _ Tutoriel

12
17/2/2015 ADO et Visual Basic : Tutoriel http://drq.developpez.com/vb/tutoriels/ADO/ 1/12 ADO et Visual Basic : Tutoriel I. Avant ProposL'ensemble du code et explications que vous trouverez dans ce document est basé sur ADO version 2.0 et Visual Basic 6. Vous trouverez ciaprès des exemples de connexions aux bases de données Access, Oracle, SQL Server ainsi qu'une explication sur les objets les plus courrants d'ADO. II. Un tour rapide d'ADOADO (ActiveX Data Object) est un composant ActiveX permettant d'accéder aux bases de données de façon beaucoup plus facile sans se soucier de tout ce qui est allocation des environnements de travail (cf. programmation avec la couche basse d'ODBC). ADO fournit des objets qui permettent de se connecter à une base et de réaliser des requêtes SQL sur cette base. Pour pouvoir utiliser ADO dans un projet Visual Basic vous avez deux solutions pour y parvenir : la première est de créer un Projet de données ; la seconde est de rajouter dans le menu Projets Références, Microsoft AtiveX Data Objects 2.x Library ; ADO propose les objets suivants : Command : permet d'exécuter des requêtes ; Connection : connexion à une source de données (aussi bien un fichier texte, qu'un fichier Excel, ou une base de données) ; Error : ensemble des erreurs retournées par le SGBD ; Parameter : permet de définir un paramètre d'une requête ; Recordset : jeu d'enregistrements retournés lors de l'exécution d'un SELECT. III. Etablir une connexion avec ADO et l'objet Connection:Pour établir une connexion à une base de données avec ADO, on utilise l'objet Connection. Vous trouverez dans ce chapitre un exemple de connexion à une base de données Access, Oracle et SQL Server. Une connexion à une base de données se définit par : l'hôte sur lequel se trouve la base de données ; le nom de la base de données ; le nom de l'utilisateur ; le mot de passe.

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.