Partager via


Fields, collection

S’applique à : Access 2013, Office 2013

La collection Fields est une des collections intrinsèques d'ADO. Une collection est un ensemble hiérarchique d'éléments qui peuvent être référencés en tant qu'unité.

La collection Fields contient un objet Field pour chaque champ (colonne) de l'objet Recordset. Comme toutes les collections ADO, elle possède les propriétés Count et Item, ainsi que les méthodes Append et Refresh. Notons également la présence des méthodes CancelUpdate, Delete, Resync et Update, non disponibles pour les autres collections ADO.

Présentation de la collection Fields

Consider the Fields collection of the sample Recordset introduced in this chapter. The sample Recordset was derived from the SQL statement

 
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7 

Par conséquent, vous devez constater que la collection RecordsetFields contient trois champs.

 
'BeginWalkFields 
 Dim objFields As ADODB.Fields 
 
 objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText 
 
 Set objFields = objRs.Fields 
 
 For intLoop = 0 To (objFields.Count - 1) 
 Debug.Print objFields.Item(intLoop).Name 
 Next 
'EndWalkFields 

Ce code détermine simplement le nombre d’objets Field dans la collection Fields à l’aide de la propriété Count et effectue une boucle dans la collection, en renvoyant la valeur de la propriété Name pour chaque objet Field . Vous pouvez utiliser de nombreuses autres propriétés field pour obtenir des informations sur un champ. Pour plus d’informations sur l’interrogation d’un champ, consultez L’objet Field.

Comptage des colonnes

Assez logiquement, la propriété Count retourne le nombre réel d'objets Field compris dans la collection Fields. La numérotation des membres d'une collection commençant à zéro, vous devez toujours coder les boucles en commençant par le membre zéro et en terminant par la valeur de la propriété Count moins 1. Si vous utilisez Microsoft Visual Basic et que vous souhaitez parcourir les membres d’une collection sans vérifier la propriété Count , utilisez foreach... Commande suivante .

Si la propriété Count a pour valeur zéro, cela signifie que la collection ne contient aucun objet.

Accès à l'objet Field

Comme dans toute collection ADO, la propriété Item constitue la propriété par défaut de la collection. Elle retourne l'objet Field spécifié par le nom ou l'index qui lui est passé. Par conséquent, les instructions suivantes sont équivalentes pour l'exemple d'objet Recordset:

 
objField = objRecordset.Fields.Item("ProductID") 
objField = objRecordset.Fields("ProductID") 
objField = objRecordset.Fields.Item(0) 
objField = objRecordset.Fields(0) 

Si ces méthodes sont équivalentes, vous vous demandez laquelle choisir. Cela dépend. Le recours à un index pour extraire un objet Field d'une collection est plus rapide car cela permet d'accéder directement directement à l'objet Field, sans devoir effectuer une recherche de chaîne. En revanche, le nombre d'objets Fields de la collection doit être connu et, si l'ordre est modifié, la référence à l'index de l'objet Field doit être modifiée en conséquence. Bien que cette méthode soit plus lente, l'utilisation du nom de l'objet Field offre davantage de souplesse car elle ne dépend pas de l'ordre des objets Fields dans la collection.

Utilisation de la méthode Refresh

Contrairement à ce qui se passe pour d'autres collections ADO, l'utilisation de la méthode Refresh de la collection Fields n'a pas d'effet visible. Pour récupérer les modifications de la structure de base de données sous-jacente, vous devez utiliser la méthode Requery ou, si l'objet Recordset ne prend pas en charge les signets, la méthode MoveFirst, qui provoquera une nouvelle exécution de la commande auprès du fournisseur.

Ajout de champs à un jeu d'enregistrements

La méthode Append permet d'ajouter des champs à un objet Recordset.

Vous pouvez utiliser la méthode Append pour créer un objet Recordset par programme, sans ouvrir de connexion à une source de données. Une erreur d'exécution se produit si la méthode Append est appelée sur la collection Fields d'un objet Recordset ouvert ou sur un objet Recordset dans lequel la propriété ActiveConnection est définie. Vous pouvez ajouter des champs à un objet Recordset uniquement lorsque celui-ci n'est pas ouvert et n'a pas encore été connecté à une source de données. Notez toutefois que, pour spécifier les valeurs de la collection Fields récemment ajoutée, l'objet Recordset doit être ouvert.

Les développeurs ont parfois besoin d'un emplacement de stockage temporaire pour certaines données, ou souhaitent que certaines données se comportent comme si elles provenaient d'un serveur, pour participer à la liaison des données dans une interface utilisateur. ADO (en association avec le Service de curseur Microsoft pour OLE DB) permet de construire un objet Recordset vide en spécifiant les informations de colonnes et en appelant la méthode Open. Dans l'exemple suivant, trois nouveaux champs sont ajoutés à un nouvel objet Recordset. Par la suite, l'objet Recordset est ouvert, deux nouveaux enregistrements sont ajoutés et l'objet Recordset est stocké de façon persistante dans un fichier. Pour plus d'informations sur la persistance des objets Recordset, consultez le chapitre 5 : Mise à jour et persistance des données.)

 
 'BeginFabricate 
 Dim objRs As New ADODB.Recordset 
 
 With objRs.Fields 
 .Append "StudentID", adChar, 11, adFldUpdatable 
 .Append "FullName", adVarChar, 50, adFldUpdatable 
 .Append "PhoneNmbr", adVarChar, 20, adFldUpdatable 
 End With 
 
 With objRs 
 .Open 
 
 .AddNew 
 .Fields(0) = "123-45-6789" 
 .Fields(1) = "John Doe" 
 .Fields(2) = "(425) 555-5555" 
 .Update 
 
 .AddNew 
 .Fields(0) = "123-45-6780" 
 .Fields(1) = "Jane Doe" 
 .Fields(2) = "(615) 555-1212" 
 .Update 
 End With 
 
 objRs.Save App.Path & "\FabriTest.adtg", adPersistADTG 
 
 objRs.Close 
 'EndFabricate 

L’utilisation de la méthode FieldsAppend diffère entre l’objet Recordset et l’objet Record . Pour plus d'informations sur les objets Record, consultez le chapitre 10 : Enregistrements et flux.