visual basic pour applications dao - adodcanl.free.fr/etudes/cours_iut_iq2/bdd2/cm/vba.pdf ·...

65
Visual Visual Basic pour Applications Basic pour Applications DAO DAO - - ADO ADO IQ2 – BDD © Richard CHBEIR : [email protected] Bibliographie : •"VBA pour Access 2000", Edition Eyrolles, ISBN : 2-212-09100-1 •"ASP 3.0 Professionnel", Edition Eyrolles, ISBN: 2-212-09151-6 • "Programmation Access pour Windows 95", Edition Micro Application ISBN : 2-7429-0635-5 • "Aide de Microsoft Access", F1

Upload: hoangthu

Post on 09-Oct-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

VisualVisual Basic pour Applications Basic pour Applications DAO DAO -- ADOADO

IQ2 – BDD© Richard CHBEIR

: [email protected]

Bibliographie :• "VBA pour Access 2000", Edition Eyrolles, ISBN : 2-212-09100-1• "ASP 3.0 Professionnel", Edition Eyrolles, ISBN: 2-212-09151-6• "Programmation Access pour Windows 95", Edition Micro Application ISBN : 2-7429-0635-5 • "Aide de Microsoft Access", F1

© [email protected]

Plan du chapitrePlan du chapitreIntroductionLes composants AccessLes méthodes d'accès aux donnéesLe modèle DAOLe modèle ADOQuelques conseils

© [email protected]

IntroductionIntroduction

© [email protected]

DDééfinitionfinitionVBA est un langage de programmation commun à tous les produits MicrosoftMoyen rapide de développerPermet d'interagir avec l'environnement Windows

Programmation événementielleSouris: Déplacement, clique du bouton droit, glisser, déplacer, etc.Clavier: saisie, touche relâchée, etc.

Gestion des fenêtresExécution des commandes systèmes

Capable de gérer les erreurs

© [email protected]

DistinctionDistinction

Ne pourra en aucun cas s'exécuter de manière autonome.

Il existe cependant une version "Run time" d'Access, nommée "Kit Office Développement Environnement (Kit ODE)", qui permet de distribuer une application

développée sous Access sans avoir à installer Access sur les postes destinés à faire fonctionner cette application.

Permet de créer des applications indépendantes

Complètement lié à un des produits Microsoft office

VBVBA

Version 1 et 2 d'Access

Access Basic

© [email protected]

Syntaxe avec le code en couleurExplorateur d’objetsAide contextuelle syntaxique depuis les lignes de codePossibilité de définir des segments de code se compilant conditionnellement

EspionsPoints d’arrêt

CaractCaractééristiques de VBAristiques de VBA

© [email protected]

Environnement de Environnement de ddééveloppement IDEveloppement IDE

Déclaration Fonction

Procédure

Exploration

Propriétés

Fenêtre Code

© [email protected]

Comment tester Comment tester

Fenêtre dFenêtre d’’exexéécutioncution

ExExéécution dcution d’’une procune procééduredure

Print ou ?

© [email protected]

Les composants AccessLes composants Access

© [email protected]

Composants majeursComposants majeursAccess comporte deux composants :

Microsoft JetContrôle le stockage des donnéesDéfinit les objets de la BD

Le moteur de l’applicationContrôle la programmationContrôle l’interface

Comment ça fonctionne ?Quand vous ouvrez une BD, le moteur de l’application utilise Microsoft Jet pour déterminer les noms des tables, des requêtes, etc.

© [email protected]

Microsoft Jet 4.0Microsoft Jet 4.0C'est le Gestionnaire de fichiersGestionnaire de fichiers

Il possède les caractéristiques suivantes :Moteur à 32 bitsSupport Unicode

Jeux de caractères à deux octets par caractère

Types de données compatibles avec SQL ServerSQL 92Verrouillage amélioré des données

© [email protected]

Structure simplifiStructure simplifiéée du e du modmodèèle Applicationle Application

Application

Screen

DoCmd

Reports

Forms

Control Properties

Debug

© [email protected]

Le langage VBALe langage VBA

© [email protected]

Types de donnTypes de donnééesesByte

entiers positifs compris entre 0 et 255, Boolean

True et False, Integer ou %

entiers entre -32 768 et 32 767,Currency ou @

valeurs entre -922 337 203 685 477,5808 et 922 337 203 685 477,5807 String ou $

Entre 0 et environ 63 Ko de caractères Long ou &

entier -2 147 483 648 et 2 147 483 647

© [email protected]

Types de donnTypes de donnééesesDecimalSingle ou !Double ou #Date

pour stocker les dates (1/01/100 – 31/12/9999) et les heures Object

Tous types d'objets,Variant (Par défaut)

Type de données particulier pouvant contenir des données numériques, des chaînes ou des dates, des types définis par l'utilisateur ainsi que les valeurs spéciales Empty et Null

© [email protected]

DDééclarations clarations Des variables (DIM)

DIM entier as INTEGERDIM type as VariantDIM x(10, 25) as Single

REDIM x(10, 40) as INTEGERDes constantes (CONST)

Const PI As Single = 3.14Des structures de données définies par l’utilisateur

Type AdresseNumero as IntegerNomRue as String * 30Ville as String * 50CodePostal as INTEGER

End TYPE…..DIM Adresse_client as Adresse

© [email protected]

DDééclarations clarations Des procédures (SUB)

Des fonctions (function)Function NoteAleatoire() As SingleDim ValeurAlea As Single

ValeurAlea = Rnd() * 20NoteAleatoire = Format(ValeurAlea, "0.0")

End Function

Sub Attribution_Note_Aleatoire()Dim Notes As Recordset

. . .

End Sub

© [email protected]

PortPortéée d'une variablee d'une variablePrivate

Permet de définir des variables privéesUne procédure privée englobe des variables privées

Public (ou Global)Permet de définir des variables publiques

StaticPermet de (re)définir des variables dont le contenu est non modifiable

© [email protected]

OpOpéérateursrateursMathématiques

+, -, *, /, ^De comparaison

<, <, =, <=, >=, <>Logiques

AND, OR, NOT, EQV

© [email protected]

Branchement et bouclesBranchement et bouclesInstruction IF

IF (a=5) Then…Else…ENDIF

Instruction IIf(condition, truepart, falsepart)Instruction GOTO

GoTO Fin….. :FIN

Instruction FOR…NEXTFor i=1 to 10---Next i

Instruction WhileWhile i<=10---Wend

© [email protected]

Branchement et bouclesBranchement et bouclesInstruction DO..LOOP

Do [{While | Until} condition][statements]LoopVous pouvez également utiliser la syntaxe suivante :Do[statements]Loop [{While | Until} condition]

Instruction Select CaseSelect CASE valeur

Case 0 to 2….Case 3 to 5…Case 6Case ELSE

END SELECT

L’instruction CALLTransfère le contrôle à une procédure ou à une Fonction (interne ou externe)Call MyProc(0)

© [email protected]

RRééfféérencer des objetsrencer des objetsPlusieurs méthodes :

NomCollection![Nom de l’Objet]Ex: Forms![Clients]

NomCollection("Nom de l’Objet")Ex: Forms("Clients")

NomCollection(Numéro de l’Objet)Ex: Forms(0) et Forms(Forms.Count-1)

Pour accéder à un sous-object ou à une méthode, on utilise aussi le .

Ex: DBEngine.Workspaces(0).CurrentDB()

© [email protected]

Gestion dGestion d’’erreurserreursOn error … ⇒ Génération d'une constante ErrResume NEXT

Le programme continue sans abandonnerERL

Renvoie le numéro de la ligne où l’erreur s’est produiteErr.Number

Contient le code de l’erreurError$(Err) ou Err.Description

Donne les détails de ERR

On Error GoTo Err_Click….Err_Click:MsgBox Err.Number & " : " & Err.Description

© [email protected]

Fonctions intFonctions intéégrgrééesesSur les chaînes

Left (chaîne, taille), Right, Replace, etc.Arithmétiques

ABS, LOG, EXP, etc.Commandes

CHDIR, CHDRIVE, DIR£, MKDIR, RMDIR, etc.Heure/date

Date$, Now, etc.Affichage

MSGBOX, INPUTBOX$, etc.

© [email protected]

LibrairiesLibrairiesLes librairies proposées dans très variéesPour les intégrer dans un module:Dans l'IDE de Visual Basic

Outils/références

Intégrer seulement les librairies concernées, sinon

© [email protected]

MMééthodes d'accthodes d'accèès aux s aux donndonnééeses

© [email protected]

MMééthodes d'accthodes d'accèès aux s aux donndonnééeses

Plusieurs librairies sont proposées. Mais Principalement :

DAO (Data Access Objects)Interface permettant l'accès aux données qui communique avec Microsoft Jet et des sources de données compatibles ODBC pour se connecter à, récupérer, manipuler et mettre à jour des données et la structure de base de données.

ADO (ActiveX Data Objects)Interface d'accès aux données qui communique avec des sources de données compatibles OLE DB pour la connexion, la récupération, la manipulation et la mise à jour de données(Via le Web par exemple ;)

© [email protected]

Le modLe modèèle DAOle DAO

© [email protected]

Le modLe modèèle DAOle DAOAccess VBA

DAO

ODBCDirect

ODBC

ISAM dbase

ODBC SQL Server

ODBC Oracle

*.mdb *.dbf SQL Server 2000 Oracle

Microsoft JET

© [email protected]

CaractCaractééristiques de DAOristiques de DAOAdapté à la gestion des BD hétérogènes

Oracle, SQL server, Access, Sybase, Paradox, etc.Conçu pour des applications client/serveurDépend d'un groupe international (et pas de Microsoft ☺)

© [email protected]

Structure du modStructure du modèèle DAOle DAO

DBEngine

Workspaces

Errors

Connections

Databases

Groups

Users

QueryDefs

Recordsets

TableDefs

Containers

Relations

Parameters

Fields

Indexes

Documents

© [email protected]

AccAccèès s àà une BDune BDOuverture

OpenDataBase(Name, Exclusif, ReadOnly)Fermeture

CloseExemple (Déclaration de trois bases)

Sub Accès_femeture_base()

' 1- Déclaration des bases

DIM MaBD1 As DataBaseDIM MaBD2, MaBD3 As DataBase. . . .

' 2- Affectation des basesSet MaBD1 = OpenDataBase("c:\temp\fichierDB1.mdb") ' base localeSet MaBD2 = OpenDataBase("\\serveur_IUT\Partage\fichierDB2.mdb", TRUE) ' base partagée en mode exclusifSet MaBD3 = OpenDataBase("fichierDB3.mdb", FALSE, TRUE) ' base locale ouverte en lecture seule. . . .

' 3- Fermer les basesMaBD1.CloseMaBD2.CloseMaBD3.Close

End Sub

© [email protected]

TablesTablesCréation (d'une table Etudiants avec deux champs Nom et Numéro)

Sub Création_Table()

'1- déclaration de la base

Dim db As database

'1- déclaration d'une variable de type Table

Dim definition_table As TableDef

'1- déclaration d'une variable de type champ

Dim champ_Nom, Champ_Num As Field

. . . .'2- Affectation

Set db = currentDb()

Set definition_table = db.CreateTableDef("Etudiant")

Set champ_Nom = definition_table.CreateField("Nom", dbText, 50)

Set champ_Num = definition_table.CreateField("Numéro", dbInteger)

definition_table.Fields.append champ_Nom

definition_table.Fields.append champ_Num

. . . .

'3- Sauvegarder

Db.TableDefs.Append definition_table

End Sub

© [email protected]

TablesTablesSuppression (de la table Etudiants)

Déclaration (d'une variable qui représente la table Etudiants)

Sub Suppresion_table()

'1- déclaration de la base

Dim db As database

'2- Affectation

Set db = currentDb()

' Suppresion de la tableDb.TableDefs.Delete "Etudiants"

End Sub

Sub Attribution_table()

'1- déclaration de la baseDim db As DatabaseDim definition_table As Recordset

'2- AffectationSet db = CurrentDb()Set definition_table = db.OpenRecordset("Etudiants", dbOpenDynaset)

End Sub

© [email protected]

RequêtesRequêtesCréation (d'une requête des Clients lyonnais)

Suppression (de la requête Client lyonnais)

Sub création_requete()'1- déclarationDim db As DatabaseDim definition_requete As QueryDef'2- AffectationSet db = CurrentDb()Set definition_requete = db.CreateQueryDef("Clients Lyonnais", "Select * fromClients where Ville='Lyon'")

End Sub

Sub Suppresion_requête()

'1- déclaration de la base

Dim db As database

'2- Affectation

Set db = currentDb()

' Suppresion de la requete

Db.QueryDefs.Delete "Clients Lyonnais"End Sub

© [email protected]

RequêtesRequêtesDéclaration (de la requête Clients lyonnais)

Sub Attribution_requete()

'1- déclaration de la baseDim db As DatabaseDim requete As Recordset

'2- AffectationSet db = CurrentDb()Set requete = db.OpenRecordset("Clients lyonnais", dbOpenDynaset)

End Sub

Sub Attribution_requete_methode2 ()

'1- déclaration de la baseDim db As DatabaseDim requete As RecordsetDim definition_requete As QueryDef

'2- AffectationSet db = CurrentDb()Set definition_requete = db.QueryDefs("Clients lyonnais")Set requete = definition_requete.OpenRecordset(dbOpenDynaset)

End Sub

© [email protected]

AccAccééder aux enregistrement der aux enregistrement d'une tabled'une table

Plusieurs moyens, mais principalement :

RecordSet

© [email protected]

RecordSetRecordSetApplicable sur les tables et les requêtesTrois éléments sont essentiels

La base de données concernéeLes enregistrements dans la baseLe type de RecordSet

Déclaration d'une variablePour représenter la table "Clients"

'1- déclaration des variables

DimDim dbdb AsAs DatabaseDatabaseDimDim tb_clientstb_clients AsAs RecordsetRecordset'2- Affectation

SetSet dbdb = = CurrentDbCurrentDb()()SetSet tb_clienttb_client = = db.OpenRecordsetdb.OpenRecordset("Clients",("Clients", dbOpenDynaset)dbOpenDynaset)

dbOpensnapshot)dbOpensnapshot)

DbOpentable)DbOpentable)

© [email protected]

RecordSetRecordSetPropose plusieurs méthodes :

De positionnementMoveFirst | MoveNext | MoveLast | MovePrevious | Move nBOF, EOF

De rechercheFindFirst | FindLast | FindNext | FindPrevious

De manipulationDeleteUpdateEditAddnewFieldRequery (mise-à-jour)

DiversesBookmarkRecordCount

© [email protected]

RecordSetRecordSetPositionnement sur un enregistrement

Propriété BookmarkIndique l’enregistrement courantCette propriété mise à jour à chaque déplacement dans le recordset

Exemple

DimDim dbdb AsAs DatabaseDatabaseDimDim tb_clientstb_clients AsAs RecordsetRecordsetDimDim enregistrement enregistrement AsAs VariantVariant'2'2-- AffectationAffectationSetSet dbdb = = CurrentDbCurrentDb()()SetSet tb_clienttb_client = = db.OpenRecordsetdb.OpenRecordset("Clients", ("Clients", dbOpenDynasetdbOpenDynaset))tb_client.FindFirsttb_client.FindFirst "[Code Client] = 'ANTON'""[Code Client] = 'ANTON'"enregistrement = enregistrement = tb_client.Bookmarktb_client.Bookmark' on se d' on se dééplace dans les enregistrements place dans les enregistrements …… donc le donc le bookmarkbookmark changechange' Pour se repositionner ' Pour se repositionner àà l'enregistrement ANTONl'enregistrement ANTONtb_client.Bookmarktb_client.Bookmark = enregistrement= enregistrement

© [email protected]

RecordSetRecordSetMéthodes FindFirst | FindLast | FindNext | FindPrevious

Permet de trouver un enregistrement selon un critère donnéutilisation des opérateurs de comparaison, logique, et/ou de l’opérateur LIKE

ExempleOn veut savoir si on a des clients dont le code commence par A

'1- déclaration des variablesDimDim db db AsAs DatabaseDatabaseDimDim tb_clients tb_clients AsAs RecordsetRecordset'2- AffectationSetSet db = CurrentDb()db = CurrentDb()SetSet tb_client = db.OpenRecordset("Clients", dbOpenDynaset)tb_client = db.OpenRecordset("Clients", dbOpenDynaset)'3'3-- Rerchercher les clients dont le code commence par ARerchercher les clients dont le code commence par Atb_client.FindFirst "[Code Client] LIKE 'A*'"tb_client.FindFirst "[Code Client] LIKE 'A*'"'4'4-- Affichage d'un message quand l'enregistrement est trouvAffichage d'un message quand l'enregistrement est trouvééIfIf NotNot tb_client.NoMatch tb_client.NoMatch ThenThen

MsgBox "trouvMsgBox "trouvéé""End IfEnd If

© [email protected]

Comment accComment accééder der àà un un champ ?champ ?

• En utilisantFields :

stocke les différents champs d ’un enregistrement. Chaque champ est représenté par un objet instance de la classe FieldLe nombre de Fields est déterminé par la méthode CountRemarque : la classe field permet de représenter un champ. On y trouve principalement les propriétés name et value qui renvoie respectivement le nom et la valeur du champ.

Exemple

Dim rs As Recordsetrs.Fields("nom_produit") 'valeur du champ nom_produitrs ("nom_produit") 'valeur du champ nom_produitrs.[nom_produit] 'valeur du champ nom_produitrs![nom_produit] 'valeur du champ nom_produitrs.Fields(1) 'valeur du premier champrs(1) 'valeur du premier champ

© [email protected]

Question 1Question 1Comment afficher la liste des champs de la table "Etudiants" ainsi que le contenu de chaque champ ?

Sub afficher_contenu_table_clients()Dim db As DatabaseDim tb_clients As RecordsetSet db = CurrentDb()Set tb_client = db.OpenRecordset("Clients", dbOpenDynaset)For i = 0 To tb_client.Fields.Count - 1

Debug.Print tb_client.Fields(i).NameNext iWhile Not tb_client.EOF

For i = 0 To tb_client.Fields.Count - 1Debug.Print tb_client.Fields(i).Value

Next itb_client.MoveNext

WendEnd Sub

© [email protected]

Ajout d'un enregistrementAjout d'un enregistrementElle se fait en respectant les étapes suivantes :

1. Utiliser la méthode AddNew du Recordset pour créer un nouvel enregistrement vide et s’y positionner

2. Donner une valeur aux champs (Fields) du RecordsetOn peut également passer ces valeurs comme paramètres de la méthode AddNew

3. Utiliser la méthode Update du Recordset pour enregistrer le nouvel enregistrement dans la base

On peut utiliser la méthode CancelUpdate pour annuler la création

© [email protected]

RecordSetRecordSetExemple d'ajout

On veut ajouter le client IQ2 ayant le code 'IUTIQ'

DimDim db db AsAs DatabaseDatabaseDimDim tb_clients tb_clients AsAs RecordsetRecordset

SetSet db = CurrentDb()db = CurrentDb()SetSet tb_client = db.OpenRecordset("Clients", dbOpenDynaset)tb_client = db.OpenRecordset("Clients", dbOpenDynaset)

'1'1-- Demander la crDemander la crééationationTb_client.AddNewTb_client.AddNew

'2'2-- Fournir les valeurs des champsFournir les valeurs des champsTb_client.[Code Client] = "IUTIQ"Tb_client.[Code Client] = "IUTIQ"Tb_client![Nom] = "IQ2"Tb_client![Nom] = "IQ2"

'3'3-- Enregistrer les donnEnregistrer les donnééesesTb_client.UpdateTb_client.Update

© [email protected]

RecordSetRecordSetModification d ’enregistrements

1. Se positionner sur l ’enregistrement à modifier2. Utiliser la méthode Edit3. Modifier la valeur des champs4. Utiliser la méthode update

ExempleOn veut changer le nom du client dont le code est 'ANTON'

Dim db As DatabaseDim tb_clients As RecordsetSet db = CurrentDb()Set tb_client = db.OpenRecordset("Clients", dbOpenDynaset)tb_client.FindFirst "[Code Client] = 'ANTON'"

' On aurait pu faire directement 'Set tb_client = db.OpenRecordset("Select * from Clients where [Code client] = 'ANTON'")

If Not tb_client.NoMatch Then'If (tb_client.RecordCount != 0) Then

MsgBox "trouvé"tb_client.Edittb_client.[Nom] = "Richard CHBEIR"tb_client.Update

End If

© [email protected]

RecordSetRecordSetSuppression d ’enregistrements

1. Se positionner sur l ’enregistrement à supprimer2. Utiliser la méthode deleteRemarque : l ’enregistrement courant n ’est plus valide … pensez

donc à le déplacer (avec MoveNext ou autres)

ExempleSupprimer le client dont le Code est ANTON

Dim db As DatabaseDim tb_clients As RecordsetSet db = CurrentDb()Set tb_client = db.OpenRecordset("Clients", dbOpenDynaset)tb_client.FindFirst "[Code Client] = 'ANTON'"' On aurait pu faire directement 'Set tb_client = db.OpenRecordset("Select * from Clients where [Code client] = 'ANTON'")tb_client.deletetb_client.MoveNext

© [email protected]

RecordSetRecordSetTri de données

1. Ouvrir la table ou la requête avec RecordSet2. Utiliser la méthode Sort3. Copier le résultat dans une autre RecordSet

ExempleTrier les clients par ordre décroissant

DimDim dbdb AsAs DatabaseDatabaseDimDim enregistrement, enregistrement, enregistrement_trieenregistrement_trie AsAs RecordsetRecordsetSetSet dbdb = = CurrentDbCurrentDb()()SetSet enregistrement = enregistrement = db.OpenRecordsetdb.OpenRecordset("select * FROM Clients")("select * FROM Clients")' ou Set enregistrement = ' ou Set enregistrement = db.OpenRecordsetdb.OpenRecordset("Clients", ("Clients", dbOpenDynasetdbOpenDynaset))' Attention' Attention' Set enregistrement = ' Set enregistrement = db.OpenRecordsetdb.OpenRecordset("Clients") ("Clients") ne marche pasne marche pasenregistrement.Sortenregistrement.Sort = "Nom DESC"= "Nom DESC"SetSet enregistrement_trieenregistrement_trie = = enregistrement.OpenRecordsetenregistrement.OpenRecordset((dbOpenDynasetdbOpenDynaset))

© [email protected]

Filtre de donnFiltre de donnééeses

Filtre de données1. Ouvrir la table ou la requête avec RecordSet

2. Utiliser la méthode Filtre

3. Copier le résultat dans une autre RecordSet

ExempleTrouver les clients dont le nom est IQ2 ou le code postal commence par 21

DimDim dbdb AsAs DatabaseDatabaseDimDim enregistrement, enregistrement, enregistrement_filtreenregistrement_filtre AsAs RecordsetRecordsetSetSet dbdb = = CurrentDbCurrentDb()()Set Set enregistrement = enregistrement = db.OpenRecordsetdb.OpenRecordset("Clients")("Clients")enregistrement.Filterenregistrement.Filter = "[Nom] = 'IQ2' = "[Nom] = 'IQ2' OrOr [Code Postal] [Code Postal] likelike '21*'"'21*'"SetSet enregistrement_filtreenregistrement_filtre = = enregistrement.OpenRecordsetenregistrement.OpenRecordset((dbOpenDynasetdbOpenDynaset))

, , dbOpenDynasetdbOpenDynaset))

© [email protected]

Le modLe modèèle ADOle ADO

© [email protected]

Le modLe modèèle ADOle ADOVC++ VBA/VB

ADO

Pilote ODBCSQL Server

ODBC

*.mdb IndexServer

SQL Server 2000

Access ASP Java

Conco

mmateur

s

OLE D

B

Jet OLE ObjectADSDSOMSIDXS SQLOLEDB MSDASQL

Four

nisse

urs

OLE D

B

Annuaire

© [email protected]

Fournisseurs OLE DBFournisseurs OLE DBJet OLE DB 4.0

Pour les BD AccessSQL ServerOracleODBC Drivers

Pour les sources de données ODBCOLAP Services

Pour le serveur OLAP Microsoft (Exchange Server)Simple Provider

Pour les fichiers de texte simplesMicrosoft Directory Services

Pour Active Directory sous Windows 2000Internet Publishing

Pour l'accès aux serveurs WebDTS packages

Pour les services de conversion de données SQL server

© [email protected]

CaractCaractééristiques de OLE DB ristiques de OLE DB et ADOet ADO

Adaptés à la gestion de toute source de donnéesBD, systèmes de messagerie, service d'annuaires, serveurs Web, etc.

Conçus pour des applications orientées InternetJeux d'enregistrements déconnectés, meilleure gestion des utilisateurs, etc.

Dépend complètement de Microsoft ☺

© [email protected]

Structure simplifiStructure simplifiééee

Connection

Error

RecordSet Command

ParameterField

ExExéécutercuter

Connexion Connexion ActiveActive

SourceSource

ExExéécutercuter

© [email protected]

Instanciation des classesInstanciation des classesSyntaxe

Exemple

Dim nom_variable As [New] ADODB.nom_classe

Dim cn As New ADODB.ConnectionDim cmd As New ADODB.CommandDim rst As New ADODB.Recordset

© [email protected]

La classe La classe ConnectionConnectionPermet la connexion à une source de données. Un objet de cette classe identifie une et une seule connexion à une source de donnéesPermet l'exécution de commandes

Requête de mise à jour, d'insertion, de suppression, etc.

© [email protected]

Les mLes mééthodes thodes ConnectionConnectionOpen

Ouvre une connexion à une source de données

ExecuteExécute une requête et récupère le résultat dans un RecordSet

CloseFerme une connexion

DimDim rs1, rs2 rs1, rs2 AsAs NewNew ADODB.RecordsetADODB.RecordsetSetSet rs1 = rs1 = cn.executecn.execute("select [nom Client] ("select [nom Client] fromfrom Clients")Clients")cn.Executecn.Execute("insert ("insert intointo ma_tablema_table values (5, values (5, ‘‘abcabc’’, , ……)"))")

cn.closecn.closeSetSet cncn = = nothingnothing

DimDim cncn AsAs NewNew ADODB.ConnectionADODB.Connectioncn.opencn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data source = c:"Provider=Microsoft.Jet.OLEDB.4.0; Data source = c:\\temptemp\\Ma_Base.mdbMa_Base.mdb""

© [email protected]

La classe La classe CommandCommandPermet d'exécuter des commandes sur une source de données (des instructions SQL)

Souvent avec des paramètres

© [email protected]

La classe La classe CommandCommand

Propriétés.CommandText : stocke le texte de la commande

Ex : objet_cmd.CommandText = "select * from Clients"

.ActiveConnection : permet de choisir la connexion (donc la base) sur laquelle s’exécutera la commande

Ex : set objet_cmd.ActiveConnection = cn

© [email protected]

La classe La classe CommandCommand

Méthode Execute : permet d ’exécuter la commande

Sans paramètre (stockée dans la propriétéCommandText)

– Ex : objet_command.ExecuteAvec paramètre

– Ex : objet_command.Execute("select * fromproduits")

© [email protected]

La classe La classe CommandCommand

Exemple

DimDim cncn AsAs NewNew ADODB.ConnectionADODB.Connectioncn.opencn.open "DSN="DSN=Base_ClientsBase_Clients""' Cela signifie qu'une source de donn' Cela signifie qu'une source de donnéées nommes nomméée e Base_ClientBase_Client existe dexiste dééjjàà dans ODBC dans ODBC

DimDim cmdcmd AsAs NewNew ADODB.CommandADODB.Commandcmd.CommandTextcmd.CommandText = "select * = "select * fromfrom Clients"Clients"SetSet cmd.ActiveConnectioncmd.ActiveConnection = = cncn

DimDim rsrs AsAs NewNew ADODB.recordsetADODB.recordsetSetSet rsrs = = cmd.Executecmd.Execute

© [email protected]

La classe La classe RecordsetRecordsetPermet de contenir l'ensemble des données extraites des sources

Stocke le résultat de l’exécution d’une commande sous forme d’un ensemble de lignesSeule la ligne courante est visible (Notion de curseur)

© [email protected]

La classe La classe RecordsetRecordsetTrois possibilités d'instanciation via la méthode

Execute de Connection

Execute de Command

Open de Recordset

DimDim cmdcmd AsAs NewNew ADODB.CommandADODB.Commandcmd.CommandTextcmd.CommandText = "select * = "select * fromfrom Produits"Produits"setset cmd.ActiveConnectioncmd.ActiveConnection = = cncnDimDim rsrs AsAs NewNew ADODB.recordsetADODB.recordsetsetset rsrs = = cmd.Executecmd.Execute

DimDim rsrs AsAs NewNew ADODB.recordsetADODB.recordsetsetset rsrs = = cn.executecn.execute("select [nom Client] ("select [nom Client] fromfrom Clients")Clients")

DimDim rsrs AsAs NewNew ADODB.recordsetADODB.recordsetrs.openrs.open "select * "select * fromfrom Clients", "Clients", "Base_ClientsBase_Clients""

© [email protected]

CrCrééation dation d’’un un RecordsetRecordset

Syntaxe générale de la méthode openobjet_recordset.open une_instruction connection_active lock_type

requête requête sqlsql, nom d, nom d’’une table, une table, ……

une chaune chaîîne contenant le DSN ne contenant le DSN ou une rou une rééfféérence rence àà un objet un objet

de la classe de la classe connectionconnection

Une constante qui prend une des valeurs suivantes :Une constante qui prend une des valeurs suivantes :•• adLockReadOnlyadLockReadOnly les donnles donnéées ne peuvent pas être modifies ne peuvent pas être modifiééeses•• adLockPessimisticadLockPessimisticles enregistrements sont verrouillles enregistrements sont verrouilléés ds dèès le ds le déébutbut•• adLockOptimisticadLockOptimistic lesles enregistrements ne sont verrouillenregistrements ne sont verrouilléés qus qu’’au moment de lau moment de l’’appel de la mappel de la mééthode updatethode update

© [email protected]

ConseilsConseilsOptimiser votre application

Réduire la consommation de mémoireUtilisez le bon type de donnéesRegroupez les procédures dans les modulesNe chargez pas les bibliothèques inutiles

Augmenter la vitesse d'exécutionRéduire les portions codeUtilisez les constantes

Accroître la vitesse perçuePré-charger et masquer des formulairesStocker localement les données dans un cache

Compacter la baseCommentez votre code