visual basic pour applications dao - adodcanl.free.fr/etudes/cours_iut_iq2/bdd2/cm/vba.pdf ·...
TRANSCRIPT
VisualVisual Basic pour Applications Basic pour Applications DAO DAO -- ADOADO
IQ2 – BDD© Richard CHBEIR
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
Plan du chapitrePlan du chapitreIntroductionLes composants AccessLes méthodes d'accès aux donnéesLe modèle DAOLe modèle ADOQuelques conseils
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
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
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
Environnement de Environnement de ddééveloppement IDEveloppement IDE
Déclaration Fonction
Procédure
Exploration
Propriétés
Fenêtre Code
Comment tester Comment tester
Fenêtre dFenêtre d’’exexéécutioncution
ExExéécution dcution d’’une procune procééduredure
Print ou ?
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.
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
Structure simplifiStructure simplifiéée du e du modmodèèle Applicationle Application
Application
Screen
DoCmd
Reports
Forms
Control Properties
Debug
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
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
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
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
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
OpOpéérateursrateursMathématiques
+, -, *, /, ^De comparaison
<, <, =, <=, >=, <>Logiques
AND, OR, NOT, EQV
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
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)
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()
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
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.
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
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 ;)
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
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 ☺)
Structure du modStructure du modèèle DAOle DAO
DBEngine
Workspaces
Errors
Connections
Databases
Groups
Users
QueryDefs
Recordsets
TableDefs
Containers
Relations
Parameters
Fields
Indexes
Documents
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
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
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
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
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
AccAccééder aux enregistrement der aux enregistrement d'une tabled'une table
Plusieurs moyens, mais principalement :
RecordSet
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)
RecordSetRecordSetPropose plusieurs méthodes :
De positionnementMoveFirst | MoveNext | MoveLast | MovePrevious | Move nBOF, EOF
De rechercheFindFirst | FindLast | FindNext | FindPrevious
De manipulationDeleteUpdateEditAddnewFieldRequery (mise-à-jour)
DiversesBookmarkRecordCount
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
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
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
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
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
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
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
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
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))
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))
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
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
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 ☺
Structure simplifiStructure simplifiééee
Connection
Error
RecordSet Command
ParameterField
ExExéécutercuter
Connexion Connexion ActiveActive
SourceSource
ExExéécutercuter
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
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.
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""
La classe La classe CommandCommandPermet d'exécuter des commandes sur une source de données (des instructions SQL)
Souvent avec des paramètres
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
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")
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
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)
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""
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
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