Le premier site francophone dédié au développement Pocket PC


Comment accéder aux informations d'une table avec ADO ?
 
   


Avant de commencer, petit rappel

Une table est une grille dont les lignes sont des enregistrements et les colonnes des champs de données.
Chaque champ possède un type de données (texte, entier signé, etc...)

Voici par exemple une table composée de 4 champs (Numero, Nom, Prenom et Ville) et remplie avec 4 enregistrements :

Numero
Nom
Prenom
Ville
456 Dupont Jean Paris
786 Martin Pierre Marseille
1234 Sibué Stéphane Chambéry
6531 Martin Jean Jacques Toulouse

Les informations d'une table peuvent être sélectionnées avec des critères. Le résultat de cette sélection s'appele une Vue. Avec ADO, les vues sont créés grâce à des objets ADOCE.Recordset, et le langage utilisé pour définir les critères de sélection est le SQL.

Nous allons partir du principe que nous voulons ouvrir une base de données qui se trouve dans le dossier 'My Documents' et qui a pour nom 'Essai.Cdb'

Que cette base de données contient une table dont le nom est 'Personnes', dont la structure et le contenu des enregistrements sont exactement comme la grille décrite plus haut.

Que la gestion des erreurs se limite à terminer proprement le programme en cas d'anomalie.

Etape 1 : Ouvrir la base de données

L'ouverture d'une base de données passe par l'utilisation d'un objet 'ADOCE.Connection' et l'utilisation de sa méthode 'Open'

Dim ConnectionBase as ADOCE.Connection

Rem On instancie l'objet connection, avec traitement simple des erreurs
Rem Dans cet exemple, si une erreur se produit, on arrête le programme
On Error Resume Next
Set ConnectionBase = CreateObject("ADOCE.Connection.3.0")
On Error GoTo 0
If ConnectionBase Is Nothing Then
MsgBox "Impossible de créer la connection ADO !", vbExclamation
Call App.End
End If

Rem Maintenant que l'objet connection existe, on peut ouvrir la base de données
Rem Si une erreur se produit à l'ouverture, on arrête le programme
On Error Resume Next
Call ConnectionBase.Open("\My Documents\Essai.CDB")
On Error GoTo 0
If ConnectionBase.State = 0 Then
MsgBox "Ouverture de la base de données impossible !", vbExclamation
Call App.End
End If


Etape 2 : Créer une vue sur une table

Pour accéder aux enregistrements d'une table, il faut utiliser un objet ADOCE.Recordset qui permet d'accéder à une table toute entière ou à une partie des enregistrements suivant des critères. Dans l'exemple qui suit, le recordset est ouvert sur une table dont le nom est 'Personnes' en ne selectionnant que les enregistrements dont le champ 'Numero' est supérieur à 200

Dim TablePersonnes as ADOCE.Recordset
Dim wSQL as String
Dim wErr as Long

Rem On instancie l'objet ADOCE.Recordset
Rem Si une erreur se produit, on arrête le programme
On Error Resume Next
Set TablePersonnes = CreateObject("ADOCE.Recordset.3.0")
On Error Goto 0
If TablePersonnes is nothing then
MsgBox "Impossible de créer l'objet Recordset !", VbExclamation
Call App.End
End If

Rem On ouvre le recordset avec les critères évoqués plus haut
wSQL = "select * from Personnes where Numero>200"
On Error Resume Next
Call TablePersonnes.Open(wSQL, ConnectionBase, adOpenKeyset,adLockPessimistic)
wErr = Err.Number
On Error Goto 0
If wErr<>0 Then
MsgBox "Impossible d'ouvrir le Recordset !", VbExclamation
Call App.End
End If

 

Etape 3 : Accéder aux enregistrements composant cette table

Maintenant que nous avons une vue (notre recordset) sur les enregistrements qui nous interessent (ceux dont le Numero>200), nous pouvons nous déplacer d'un enregistrement à l'autre, lire les données, ajouter ou modifier des informations.

Comment lire les valeurs stockées dans les champs d'un enregistrement ?

Chaque enregistrement est composé de champs, chaque champ possède un nom, un type et une valeur.
Pour lire la valeur stockée dans un champs, il faut utiliser la propriété 'Field' de l'objet Recordset. La propriété 'Field' permet d'accéder à la collection des champs. Pour lire la valeur du champ 'Numero' il suffit d'écrire :

Dim LeNumero as Long

LeNumero = TablePersonnes.Fields("Numero").Value


Le recordset retourne les valeurs des champs de l'enregistrement courant. Il faut donc se positionner sur l'enregistrement qui nous intéresse (au moyen de méthodes décrites ensuite) avant de lire la valeur de ses champs.

Comment se déplacer dans les enregistrements ?

L'objet Recordset dispose de 4 fonctions dédiées au déplacement dans les enregistrements :

MoveFirst
Pour se placer sur le premier enregistrement
MoveLast
Pour se placer sur le dernier enregistrement
MoveNext
Pour se placer sur l'enregistrement suivant
MovePrevious
Pour se placer sur l'enregistrement précedent

L'objet recordset possède aussi 2 propriétés de type Boolean (oui/non) qui déterminent le résultat d'un déplacement :

BOF
Vrai si la position actuelle est avant le premier enregistrement
EOF
Vrai si la position actuelle est après le dernier enregistrement

Important

Avec un Recordset, le fait de dépasser les limites haute et basse d'un ensemble d'enregistrement ne déclenche pas d'erreur, mais positionne BOF et/ou EOF. Si vous tentez de vous déplacer une seconde fois dans le mauvais sens, alors une erreur est générée.

Pour 'balayer' tous les enregistrements d'un recordset il suffit de se placer sur le premier enregistrement et de descendre jusqu'a ce que la propriété EOF soit vraie. Il est préférable de placer l'instruction 'MoveFirst' dans un 'On Error' afin d'éviter les erreurs liées aux tables vides, où EOF et BOF sont déjà à vrai par défaut :

On Error Resume Next
Call TablePersonnes.MoveFirst
On Error Goto 0
Do While Not TablePersonnes.EOF
Rem Ecrire ici le code à executer pour chaque enregistrement
Call TablePersonnes.MoveNext
Loop

Comment modifier un enregistrement ?

Une fois que vous êtes positionné sur un enregistrement, vous pouvez modifier les valeurs de ses champs et utiliser la méthode 'Update' pour valider physiquement vos modifications :

Rem On se positionne sur l'enregistrement que l'on souhaite modifier
Rem Puis on modifie le champs 'Nom'
TablePersonnes.Fields("Nom").Value = "Dupont"
Call TablePersonnes.Update

Comment ajouter d'un nouvel enregistrement ?

Pour ajouter un nouvel enregistrement il suffit d'utiliser la méthode 'AddNew', puis charger les valeurs des champs avant d'utiliser la méthode 'Update' :

Rem On crée un nouvel enregistrement
Call TablePersonnes.AddNew

Rem On remplit les champs
TablePersonnes.Fields("Numero").Value = 651
TablePersonnes.Fields("Nom").Value = "Martin"
TablePersonnes.Fields("Prenom").Value = "Jean-Jacques"
TablePersonnes.Fields("Ville").Value = "St Alban Leysse"

Rem On enregistre ce nouvel enregistrement
Call TablePersonnes.Update


Comment détruire un enregistrement ?

Il suffit de se positionner sur l'enregistrement à détruire, puis d'utiliser la méthode 'Delete' de l'objet Recordset.

Rem On se positionne sur l'enregistrement à détruire
Rem Puis on utilise la méthode 'Delete'
Call TablePersonnes.Delete

Attention

L'enregistrement détruit occupe toujours une place dans le recordset, mais il est impossible de modifier, ou de lire la valeur de ses champs. Tant que le recordset n'est pas reconstruit, il faut être prudent, surtout en utilisant les méthodes de déplacement. Si vous voulez que le recordset comble le trou laissé par l'enregistrement détruit, vous pouvez utiliser la méthode 'Requery' qui réouvre le recordset avec les mêmes critères que ceux stipulés lors de sa création, éliminant par la même les enregistrements détruits.

 

Si vous avez des questions concernant la gestion des bases de données avec ADO, n'hésitez pas à me les poser par mail à l'adresse suivante : webmaster@ipaqdev.com

Stéphane Sibué

 


 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.