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.