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


Comment utiliser les bookmark avec ADO ?
 
   


Dans un programme utilisant des bases de données il est très souvent nécessaire de pointer sur un
enregistrement précis afin d'effectuer diverses opérations sur lui comme l'édition, la destruction ou tout simplement l'affichage.

Ce problème arrive souvent lorsque les enregistrements sont affichés dans un contrôle ListBox ou une ListView et que vous devez vous placer sur l'enregistrement choisi par l'utilisateur. Généralement, le Recordset qui a servi à remplir cette liste existe encore, et il serait bien agréable (entendez par là, simple, donc agreable), de pouvoir l'utiliser encore car tous les paramètres sont déjà stipulés et les données sont déjà disponibles par son intermédiaire.

Le meilleur moyen pour arriver à celà, et d'utiliser des bookmarks, ou signets dans notre bon vieux français.

bookmark, quésako ?

Chaque enregistrement d'un Recordset ADO possède un bookmark unique. Ce qui signifie que l'on peut accéder directement à un enregistrement précis en stipulant son bookmark. Les bookmarks sont créés en même temps de que recordset, celà signifie qu'un bookmark donné n'est valide que pour un objet Recordset donné et donc juste pendant sa durée de vie. Si vous voulez stocker dans une variable un bookmark, vous devez impérativement utiliser une variable de type Variant.

Comment le stoker, et l'utiliser ?

Pour récupérer le bookmark d'un enregistrement, il faut que celui-ci soit l'enregistrement en cours. La propriété 'bookmark' de l'objet Recordset retourne alors le bookmark de cet enregistrement.

Si vous voulez pointer directement sur un enregistrement dont vous possédez le bookmark, il vous suffit d'affecter le bookmark mémorisé à la propriété 'bookmark' du Recordset.

Ca ne marche pas à tous les coups !

Comme ADO permet d'utiliser plusieurs moteurs de bases de données avec les mêmes objets et la même syntaxe, il peut être nécessaire de vérifier que la gestion des bookmarks et prise en charge par le provider que vous utilisez. Pour celà, vous devez tester si la fonction bookmark et active :

Dim Avecbookmark As Boolean

Avecbookmark = wRecordset.Supports(8192)

La variable Avecbookmark contient True (vrai) si le provider gère les bookmarks, et False (faux) dans le cas contraire.
Note: Si vous utiliser les base de données CDB, pas de problème, les bookmarks sont supportés.

Un petit exemple d'utilisation des bookmarks

Le moyen de plus simple d'utiliser les bookmark est de les stocker dans un tableau dynamique lors du chargement d'une ListeBox par exemple. Ce tableau dynamique doit être de type variant. Vous devez utiliser l'intruction 'Redim Preserve' à chaque enregistrement pour agrandir d'une unité ce tableau :

Rem Code de chargement de la liste
Rem Le recordset wTable est ouvert sur une table possédant les champs 'code' et 'Libelle'
Rem Nous allons remplir la ListBox 'List1' avec ces infos et gérer en parallèle le tableau
Rem Des bookmarks correspondant
Rem Ce tableau a été déclaré plus haut par -> Dim wbookmarks() As Variant<
Rem Nous allons faire évoluer la taille de ce tableau au fur et a mesure du remplissage
Rem De la liste
Dim wIndex As Integer
Call List1.Clear
Call wTable.MoveFirst
Do While Not wTable.EOF
Call List1.Additem(wTable.Fields("Code").Value & " - " & wTable.Fields("Libelle").Value
wIndex = wIndex + 1
Redim Preserve wbookmarks(wIndex) As Variant
wbookmarks(wIndex) = wTable.Bookmark
Call wTable.MoveNext
Loop

Rem Code de l'événement List1_Cick()
Rem Ce code est exécuté lorsque l'utilisateur clique sur une ligne de la liste
Rem Qui a été chargée par le code précédent
Rem Nous allons placer l'enregistrement courant du Recordset wTable
Rem sur celui pointé par l'utilisateur, en utilisant le bookmark.
Rem Attention, le premier élément rempli de notre tableau de bookmarks commence à
Rem L'index 1, celui de la ListBox commence à zéro.
Call wTable.Bookmark = wbookmarks(List1.Listindex + 1)
Msgbox "Code=" & wTable.Fields("Code") & "-" & wTable.Fields("Libelle")

 

 

Voilà, vous savez maintenant ce qu'est un bookmark ADO et comment l'utiliser. Si vous avez des questions à ce sujet, n'hésitez pas à les poser sur les forums iPAQdev.

 

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.