This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
VisualVisual Basic pour Applications Basic pour Applications DAO DAO -- ADOADO
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
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
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
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
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.
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
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 ;)
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'")
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
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
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
'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
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
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
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.
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""
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
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