Pour suivre ce chapitre, je vais supposer que vous êtes dans une nouvelle base de données, dans laquelle vous avez une table T_Celebrite, qui contient un champ NomCelebrite, dans laquelle vous aurez installé quelques Celebrites.
Avant tout, une fois dans l'environnement Access VBA, vous allez dans le menu Outils/Références, et vous cochez la référence "Microsoft ActiveX Data Objects 2.5" (2.5 est un chiffre qui peut varier), sinon, vous aurez des erreurs de compilation
Voici un premier exemple réduit à sa plus simple expression : Il se contente de créer une variable-objet MaTable comm étant de type ADODB.Recordset. Nous précisons qu'il s'agit bien d'un type de données de la bibliothèque ADODB, vcar sinon, on pourrait faire la confusion avec le type RecordSet de la bibliothèque DAO. Vous devez bien entendu déjà avoir programmé DAO pour comprendre mes explications. :
Sub AccessADO()
Dim MaTable As New ADODB.Recordset
Set MaTable = Nothing
End Sub
Cette procédure ne fait rien d'autre que de déclarer la variable, et l'assigner à rien du tout. C'est la base. C'est surtout pour vous assurer qu'à ce stade vous n'avez pas d'erreur de compilation.
Maintenant, nous allons ouvrir la table T_Celebrite du projet courant (La base de données dans laquelle vous êtes). Ou plutôt, nous allons nous y connecter, ce qui revient quasiment au même. A la fin, nous la fermons, et nous faisons pointer la variable sur Nothing pour libérer la mémoire.
Sub AccessADO()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection
MaTable.Close
Set MaTable = Nothing
End Sub
Et maintenant que nous avons ouvert la table, nous allons puiser dedans : affichage du premier enregistrement :
Sub AccessADO()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection
MsgBox MaTable("NomCelebrite")
MaTable.Close
Set MaTable = Nothing
End Sub
Voilà pour ce qui est de la base. Maintenant, nous avons toute une pleiade d'options applicables pour faire à peu près ce qu'on veut de nos tables (et de nos requêtes, d'ailleurs)
Nous allons pouvoir nous déplacer respectivement : Sur le premier, sur le dernier, sur le précédent et sur le suivant enregistrement. Attention : Le mode de connection à la table T_Celebrite va ermettre ou non certains déplacements.
Par exemple, un simple connection avec les paramètres par défaut (MaTable.Open "T_Celebrite", CurrentProject.Connection) ne va pas permettre un accès direct au dernier enregistrement, ni un retour en arrière d'un enregistrement :
Sub AccessADO()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection
' Position sur le dernier enregistrement :
' MaTable.MoveLast provoque une erreur
' L'avant-dernier :
' MaTable.MovePrevious Provoque une erreur
' Le premier :
MaTable.MoveFirst
' Le deuxième :
MaTable.MoveNext
MaTable.Close
Set MaTable = Nothing
End Sub
Pour avoir accès à tous les déplacements, il est nécessaire d'ouvrir la connection avec l'option adOpenDynamic
Sub AccessADO()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection, adOpenDynamic
' Ces 2 lignes ne posent plus de problème :
MaTable.MoveLast
MaTable.MovePrevious
MaTable.MoveFirst
MaTable.MoveNext
MaTable.Close
Set MaTable = Nothing
End Sub
Il est possible de rechercher un certain enregistrement : Dans notre cas, nous cherchons un Celebrite qui s'appelle Gates, et nous affichons son prénom. Il faut bien entendu que vous ayez un champ "Prenom", et un Celebrite dont le nom est égal à Gates évidemment.
La propriété EOF est là pour constater que l'enregistrement est trouvé.
Sub AccessADO2()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection, adOpenDynamic
MaTable.Find "NomCelebrite='Gates'"
if MaTable.EOF = False then
MsgBox MaTable("Prenom")
End If
MaTable.Close
Set MaTable = Nothing
End Sub
Remarque : Si vous aviez l'habitude de travailler avec DAO, la méthode était FindFirst.
La méthode AddNew va permettre les ajouts. Ne pas oublier la méthode Update :
Attention : Il est nécessaire d'ajouter le paramètre adLockOptimistic, sinon, ça ne marche pas : Une erreur de compilation apparait
Sub AccessADO4()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection, adOpenDynamic,
adLockOptimistic
MaTable.AddNew
MaTable("NomCelebrite") = "Yahooo"
MaTable.Update
MaTable.Close
Set MaTable = Nothing
End Sub
Sub AccessADO5()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection, adOpenDynamic,
adLockOptimistic
MaTable.Find "NomCelebrite='Gates'"
MaTable("NomCelebrite") = "Barrière"
MaTable.Update
MaTable.Close
Set MaTable = Nothing
End Sub
Remarque : On peut très bien utiliser une requête en lieu et place d'une table
Sub Efface()
Dim MaTable As New ADODB.Recordset
MaTable.Open "T_Celebrite", CurrentProject.Connection,
adOpenDynamic, adLockOptimistic
MaTable.MoveFirst
MaTable.Delete
MaTable.Close
Set MaTable = Nothing
End Sub
Dans ce cas, nous allons utiliser externe.mdb, qui se trouve dans le même dossier que la base source.
Sub AutreBase()
Dim MaBase As New ADODB.Connection
Dim MaTable As New ADODB.Recordset
MaBase.Open
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=.\Externe.mdb;"
MaTable.Open "T_Celebrite", MaBase,
adOpenDynamic, adLockOptimistic
MaTable.MoveLast
MsgBox MaTable("NomCelebrite")
MaTable.Close
Set MaTable = Nothing
MaBase.Close
Set MaBase = Nothing
End Sub
Cet exemple remplace toutes les "France" par "Turquie"
Sub RequeteAction()
Dim MaBase As New ADODB.Connection
Set MaBase = CurrentProject.Connection
MaBase.Execute "R_FranceTurquie"
MaBase.Close
Set MaBase = Nothing
End Sub
Remarque : Il est tout à fait possible de remplacer le nom de la requête par une ligne de commande SQL :
MaBase.Execute "UPDATE T_Celebrite SET PaysOrigine = 'Turquie' WHERE PaysOrigine='France'"
Remarque : Il n'y a pas de message d'avertissement
comme quoi on va exécuter une requête action avec ADO
En cas de besoin, toutefois : DoCmd.SetWarnings
False les supprime.
Menu Outils, Options, Modifier/Rechercher, Confirmer => Requête Action
---Fin---