Die Fields-Collection

Die Fields-Auflistung ist eine der systeminternen Auflistungen von ADO. Eine Auflistung ist eine geordnete Menge von Elementen, auf die als Einheit verwiesen werden kann. Weitere Informationen zu ADO-Auflistungen finden Sie unter Das ADO-Objektmodell.

Die Fields-Auflistung enthält ein Field-Objekt für jedes Feld (Spalte) im Recordset. Wie alle ADO-Auflistungen verfügt sie über die Eigenschaften Count und Item sowie über die Methoden Append und Refresh. Sie verfügt außerdem über die Methoden CancelUpdate, Delete, Resync und Update, die anderen ADO-Auflistungen nicht zur Verfügung stehen.

Untersuchen der Fields-Auflistung

Betrachten Sie die Fields-Auflistung des in diesem Abschnitt eingeführten Beispiel-Recordsets. Das Beispiel-Recordset wurde aus der SQL-Anweisung abgeleitet.

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

Somit sehen Sie, dass die Recordset Fields-Auflistung drei Felder enthält.

'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  

Dieser Code bestimmt einfach die Anzahl der Field-Objekte in der Fields-Auflistung mithilfe der Count-Eigenschaft, durchläuft die Auflistung und gibt den Wert der Eigenschaft Name für jedes Field-Objekt zurück. Sie können viele weitere Field-Eigenschaften verwenden, um Informationen zu einem Feld abzurufen. Weitere Informationen zu Field-Abfragen finden Sie im Objekt Field.

Zählen von Spalten

Wie zu erwarten, gibt die Eigenschaft Count die tatsächliche Anzahl von Field-Objekten in der Fields-Auflistung zurück. Da die Nummerierung für Elemente einer Auflistung mit null beginnt, sollten Sie immer Schleifen, die mit dem Element Null beginnen und mit dem Wert der Eigenschaft Count enden mit minus 1 codieren. Wenn Sie Microsoft Visual Basic verwenden und die Elemente einer Auflistung durchlaufen möchten, ohne die Eigenschaft Count zu überprüfen, verwenden Sie den Befehl For Each... Next.

Wenn die Eigenschaft Count null ist, enthält die Auflistung keine Objekte.

Abrufen des Felds

Wie bei jeder ADO-Auflistung ist die Eigenschaft Item die Standardeigenschaft der Auflistung. Sie gibt das einzelne Field-Objekt zurück, das durch den an sie übergebenen Namen oder Index angegeben wird. Daher entsprechen die folgenden Anweisungen dem Beispiel-Recordset:

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

Welche Methode ist die beste, wenn diese Methoden gleichwertig sind? Das ist unterschiedlich. Die Verwendung eines Indexes zum Abrufen eines Field-Objekts aus der Auflistung ist schneller, da er direkt auf das Field-Objekt zugreift, ohne eine Zeichenfolgensuche ausführen zu müssen. Andererseits muss die Field-Reihenfolge innerhalb der Auflistung bekannt sein, und wenn sich die Reihenfolge ändert, muss der Verweis auf den Field-Index in jedem Fall geändert werden. Obwohl die Verwendung des Field-Namens etwas langsamer ist, ist sie flexibler, da sie nicht von der Field-Reihenfolge in der Auflistung abhängt.

Verwenden der Refresh-Methode

Im Gegensatz zu einigen anderen ADO-Auflistungen hat die Verwendung der Refresh-Methode in der Fields-Auflistung keine sichtbare Wirkung. Um Änderungen aus der zugrunde liegenden Datenbankstruktur abzurufen, müssen Sie entweder die Methode Requery verwenden oder, sofern das Recordset-Objekt keine Textmarken unterstützt, die Methode MoveFirst, damit der Befehl für den Anbieter erneut ausgeführt wird.

Hinzufügen von Feldern zu einem Recordset

Mit der Methode Append können Sie einem Recordset Felder hinzufügen.

Sie können die Methode Append verwenden, um ein Recordset programmgesteuert zu erstellen, ohne dass Sie eine Verbindung zu einer Datenquelle öffnen müssen. Ein Laufzeitfehler tritt auf, wenn die Append-Methode für die Fields-Auflistung eines geöffneten Recordset oder für ein Recordset aufgerufen wird, dessen ActiveConnection-Eigenschaft festgelegt wurde. Sie können Felder nur an ein Recordset anfügen, das nicht geöffnet ist und noch nicht mit einer Datenquelle verbunden wurde. Um jedoch Werte für die neu angefügten Felder anzugeben, muss das Recordset zuerst geöffnet werden.

Entwickler benötigen häufig einen Ort, um einige Daten vorübergehend zu speichern, oder sie möchten, dass bestimmte Daten so agieren, als stammten sie von einem Server, damit sie an der Datenbindung auf einer Benutzeroberfläche teilnehmen können. Mit ADO (in Verbindung mit dem Microsoft Cursor Service für OLE DB) kann der Entwickler ein leeres Recordset-Objekt erstellen, indem er Spalteninformationen angibt und Open aufruft. Im folgenden Beispiel werden drei neue Felder an ein neues Recordset-Objekt angefügt. Anschließend wird das Recordset geöffnet, zwei neue Datensätze werden hinzugefügt, und das Recordset wird persistent in einer Datei gespeichert. (Weitere Informationen zur Persistenz von Recordsets finden Sie unter Aktualisieren und Beibehalten von Daten.)

'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  

Die Verwendung der Methode Fields Append ist beim Recordset-Objekt anders als beim Record-Objekt. Weitere Informationen zum Record-Objekt finden Sie unter Datensätze und Datenströme.

Weitere Informationen

Herstellen hierarchischer Recordsets