Partager via


Fields, collection

La collection Fields est l’une des collections intrinsèques d’ADO. Une collection est un jeu ordonné d’éléments qui peut être considéré collectivement comme une unité. Pour plus d’informations sur les collections ADO, consultez le modèle objet ADO.

La collection Fields contient un objet Field pour chaque champ (colonne) dans le Recordset. Comme toutes les collections ADO, elle a des propriétés Count et Item, ainsi que des méthodes Append et Refresh. Il comporte également des méthodes CancelUpdate, Delete, Resync et Update, qui ne sont pas disponibles pour d’autres collections ADO.

Examen de la collection Fields

Considérez la collection Fields de l’exemple Recordset présenté dans cette section. L’exemple Recordset a été dérivé de l’instruction SQL

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

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

'BeginWalkFields  
    Dim objFields As ADODB.Fields  
    Dim intLoop As Integer  
  
    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 de la collection Fields à l’aide de la propriété Count et effectue une boucle dans la collection, en retournant la valeur de la propriété Name pour chaque objet Field. Vous pouvez utiliser de nombreuses propriétés Field supplémentaires pour obtenir des informations sur un champ. Pour plus d’informations sur l’interrogation de Field, consultez l’objet Field.

Comptage des colonnes

Comme prévu, la propriété Count renvoie le nombre réel d’objets Field dans la collection Fields. Étant donné que la numérotation des membres d’une collection commence par zéro, vous devez toujours coder des boucles commençant par le membre zéro et se terminant par la valeur de la propriété Count moins 1. Si vous utilisez Microsoft Visual Basic et que vous souhaitez parcourir en boucle les membres d'une collection sans vérifier la propriété Count, utilisez la commande For Each...Next.

Si la propriété Count est égale à zéro, il n’existe aucun objet dans la collection.

Obtention du champ

Comme pour n’importe quelle collection ADO, la propriété Item est 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 transmis. Par conséquent, les instructions suivantes sont équivalentes pour leRecordset d’exemple :

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

Si ces méthodes sont équivalentes, laquelle est la meilleure ? Cela dépend. L’utilisation d’un index pour récupérer un champ de la collection est plus rapide, car il accède directement au champ sans avoir à effectuer une recherche de chaîne. En revanche, l’ordre des champs dans la collection doit être connu et, si l’ordre change, la référence à l’index du champ doit être modifiée partout où elle se produit. Bien qu’il soit légèrement plus lent, l’utilisation du nom du champ est plus flexible, car elle ne dépend pas de l’ordre des champs de la collection.

Utilisation de la méthode Refresh

Contrairement à d’autres collections ADO, l’utilisation de la méthode Refresh sur la collection Fields n’a aucun 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, ce qui entraîne l’exécution de la commande sur le fournisseur à nouveau.

Ajout de champs à un recordset

La méthode Append est utilisée pour ajouter des champs à un Recordset.

Vous pouvez utiliser la méthode Append pour fabriquer un Recordset par programmation 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 Recordset ouvert ou sur un Recordset où la propriété ActiveConnection a été définie. Vous pouvez ajouter des champs uniquement à un Recordset qui n’est pas ouvert et qui n’a pas encore été connecté à une source de données. Toutefois, pour spécifier des valeurs pour les champs nouvellement ajoutés, le Recordset doit d’abord être ouvert.

Les développeurs ont souvent besoin d’un emplacement pour stocker temporairement certaines données ou vouloir que certaines données agissent comme si elles provenaient d’un serveur afin qu’elles puissent participer à la liaison de données dans une interface utilisateur. ADO (conjointement avec le service de curseur Microsoft pour OLE DB) permet au développeur de créer un objet Recordset vide en spécifiant les informations de colonne et en appelant Open. Dans l’exemple suivant, trois nouveaux champs sont ajoutés à un nouvel objet Recordset. Ensuite, l’objet Recordset est ouvert, deux nouveaux enregistrements sont ajoutés et le Recordset est conservé dans un fichier. (Pour plus d’informations sur la persistance du Recordset, consultez Mise à jour et persistance des données.)

'BeginFabricate  
    Dim objRs As ADODB.Recordset  
    Set objRs = 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 Fields Append diffère entre l’objet Recordset et l’objet Record. Pour plus d’informations sur l’objet Record, consultez Records et Streams.

Voir aussi

Fabrication de recordsets hiérarchiques