Share via


Das Field-Objekt

Jedes Field-Objekt entspricht normalerweise einer Spalte in einer Datenbanktabelle. Allerdings kann ein Feld auch einen Zeiger auf ein anderes Recordset, ein sogenanntes Kapitel, darstellen. Ausnahmen, wie z. B. Kapitelspalten, werden später in diesem Leitfaden behandelt.

Verwenden Sie die Eigenschaft Value von Field-Objekten, um Daten für den aktuellen Datensatz festzulegen oder zurückzugeben. Je nach Funktionalität, die der Anbieter zur Verfügung stellt, sind einige Sammlungen, Methoden oder Eigenschaften eines Field-Objekts möglicherweise nicht verfügbar.

Mit den Sammlungen, Methoden und Eigenschaften eines Field-Objekts können Sie Folgendes tun:

  • Geben Sie den Namen eines Feldes über die EigenschaftName zurück.

  • Zeigen Sie die Daten im Feld an oder ändern Sie sie, indem Sie die Eigenschaft Value verwenden. Value ist die Standardeigenschaft des Field-Objekts.

  • Geben Sie die grundlegenden Eigenschaften eines Feldes zurück, indem Sie die Eigenschaften Type, Precision und NumericScale verwenden.

  • Geben Sie die deklarierte Größe eines Feldes zurück, indem Sie die Eigenschaft DefinedSize verwenden.

  • Geben Sie die tatsächliche Größe der Daten in einem bestimmten Feld zurück, indem Sie die Eigenschaft ActualSize verwenden.

  • Ermitteln Sie mit Hilfe der Eigenschaft Attributes und der Sammlung Eigenschaften, welche Arten von Funktionen für ein bestimmtes Feld unterstützt werden.

  • Manipulieren Sie die Werte von Feldern, die lange binäre oder lange Zeichendaten enthalten, indem Sie die Methoden AppendChunk und GetChunk verwenden.

Beheben Sie Unstimmigkeiten in Feldwerten während der Stapelaktualisierung mit Hilfe der Eigenschaften OriginalValue und UnderlyingValue, wenn der Anbieter Stapelaktualisierungen unterstützt.

Beschreiben eines Feldes

In den nachfolgenden Themen geht es um Eigenschaften des Field-Objekts, die Informationen darstellen, die das Field-Objekt selbst beschreiben - also Metadaten über das Feld. Anhand dieser Informationen lässt sich viel über das Schema des Recordset herausfinden. Zu den Eigenschaften gehören Type, DefinedSize und ActualSize, Name und NumericScale und Precision.

Entdecken des Datentyps

Die Eigenschaft Type gibt den Datentyp des Feldes an. Die von ADO unterstützten Enumerationskonstanten für Datentypen werden unter DataTypeEnum in der ADO Programmiererreferenz beschrieben.

Bei numerischen Gleitkommatypen wie adNumeric kannst du weitere Informationen erhalten. Die Eigenschaft NumericScale gibt an, wie viele Stellen rechts vom Dezimalpunkt verwendet werden, um die Werte für das Feld darzustellen. Die Eigenschaft Precision gibt die maximale Anzahl der Stellen an, die zur Darstellung der Werte für das Feld verwendet werden.

Bestimmen der Feldgröße

Mit der Eigenschaft DefinedSize können Sie die Datenkapazität eines Field-Objekts bestimmen.

Mit der Eigenschaft ActualSize können Sie die tatsächliche Länge des Wertes eines Field-Objekts zurückgeben. Für alle Felder ist die Eigenschaft ActualSize schreibgeschützt. Wenn ADO die Länge des Wertes des Field-Objekts nicht bestimmen kann, gibt die Eigenschaft ActualSize den Wert adUnknown zurück.

Die Eigenschaften DefinedSize und ActualSize haben unterschiedliche Zwecke. Nehmen wir zum Beispiel ein Field-Objekt mit dem deklarierten Typ adVarChar und dem Eigenschaftswert DefinedSize von 50, das ein einzelnes Zeichen enthält. Der zurückgegebene Wert der Eigenschaft ActualSize ist die Länge des einzelnen Zeichens in Bytes.

Bestimmen des Feldinhalts

Der Bezeichner der Spalte aus der Datenquelle wird durch die Eigenschaft Name des Feldes dargestellt. Die Eigenschaft Value des Field-Objekts gibt den tatsächlichen Dateninhalt des Feldes zurück oder legt ihn fest. Das ist die Standardeigenschaft.

Wenn Sie die Daten in einem Feld ändern möchten, setzen Sie die Eigenschaft Value gleich einem neuen Wert des richtigen Typs. Ihr Cursortyp muss Aktualisierungen unterstützen, um den Inhalt eines Feldes zu ändern. Die Datenbanküberprüfung wird hier im Batch-Modus nicht durchgeführt, so dass Sie auf Fehler prüfen müssen, wenn Sie UpdateBatch in einem solchen Fall aufrufen. Einige Anbieter bieten auch Unterstützung für die Eigenschaften UnderlyingValue und OriginalValue des ADO Field-Objekts, um Sie bei der Lösung von Konflikten zu unterstützen, wenn Sie versuchen, Batchupdates durchzuführen. Einzelheiten zum Auflösen solcher Konflikte finden Sie unter Daten bearbeiten.

Hinweis

Recordset-Feldwerte können nicht festgelegt werden, wenn neue Felder an ein Recordset angehängt werden. Vielmehr können neue Felder an ein geschlossenes Recordset angehängt werden. Dann muss das Recordset geöffnet werden, und erst dann können diesen Feldern Werte zugewiesen werden.

Mehr Feldinformationen erhalten

ADO-Objekte haben zwei Arten von Eigenschaften: integrierte und dynamische. Bis zu diesem Punkt wurden nur die eingebauten Eigenschaften des Field-Objekts besprochen.

Eingebaute Eigenschaften sind die Eigenschaften, die in ADO implementiert sind und für jedes neue Objekt unter Verwendung der Syntax MyObject.Property sofort verfügbar sind. Sie erscheinen nicht als Property-Objekte in der Sammlung der Eigenschaften eines Objekts.

Dynamische Eigenschaften werden von dem zugrunde liegenden Datenanbieter definiert und erscheinen in der Sammlung Eigenschaften für das entsprechende ADO-Objekt. Beispielsweise kann eine anbieterspezifische Eigenschaft angeben, ob ein Recordset-Objekt Transaktionen oder Aktualisierungen unterstützt. Diese weiteren Eigenschaften werden als Property-Objekte in der Properties-Sammlung des Recordset-Objekts angezeigt. Dynamische Eigenschaften können nur über die Sammlung referenziert werden, wobei die Syntax MyObject.Properties(0) oder MyObject.Properties("Name") verwendet wird.

Sie können beide Arten von Eigenschaften nicht löschen.

Ein dynamisches Property-Objekt hat vier eigene integrierte Eigenschaften:

  • Die Eigenschaft Name ist eine Zeichenfolge, die die Eigenschaft identifiziert.

  • Die Eigenschaft Type ist eine ganze Zahl, die den Datentyp der Eigenschaft angibt.

  • Die Eigenschaft Value ist eine Variante, die die Einstellung der Eigenschaft enthält. Value ist die Standardeigenschaft für ein Property-Objekt.

  • Bei der Eigenschaft Attributes handelt es sich um einen Long-Wert, der die anbieterspezifischen Merkmale der Eigenschaft angibt.

Die Sammlung Properties für das Field-Objekt enthält zusätzliche Metadaten über das Feld. Der Inhalt dieser Sammlung variiert je nach Anbieter. Das folgende Codebeispiel untersucht die Properties-Sammlung des zu Beginn dieses Abschnitts vorgestellten Beispiel-Recordset. Zunächst wird ein Blick auf den Inhalt der Sammlung geworfen. Dieser Code verwendet den OLE DB Provider für SQL Server, so dass die Sammlung Properties Informationen enthält, die für diesen Provider relevant sind.

'BeginFieldProps  
    Dim objProp As ADODB.Property  
  
    For intLoop = 0 To (objFields.Count - 1)  
        Debug.Print objFields.Item(intLoop).Name  
  
        For Each objProp In objFields(intLoop).Properties  
            Debug.Print vbTab & objProp.Name & " = " & objProp.Value  
        Next objProp  
    Next intLoop  
'EndFieldProps  

Umgang mit binären Daten

Verwenden Sie die Methode AppendChunk für ein Field-Objekt, um es mit langen Binär- oder Zeichendaten zu füllen. In Situationen, bei denen der Systemspeicher begrenzt ist, können Sie die Methode AppendChunk verwenden, um lange Werte in Teilen und nicht in ihrer Gesamtheit zu bearbeiten.

Wenn das Bit adFldLong in der Eigenschaft Attributes eines Field-Objekts auf True gesetzt ist, können Sie die Methode AppendChunk für dieses Feld verwenden.

Der erste AppendChunk-Aufruf für ein Field-Objekt schreibt Daten in das Feld und überschreibt dabei alle vorhandenen Daten. Anschließende AppendChunk-Aufrufe fügen Daten zu den vorhandenen hinzu. Falls Sie Daten an ein Feld anhängen und dann den Wert eines anderen Feldes im aktuellen Datensatz festlegen oder lesen, geht ADO davon aus, dass Sie mit dem Anfügen von Daten an das erste Feld fertig sind. Wenn Sie die Methode AppendChunk für das erste Feld wieder aufrufen, interpretiert ADO den Aufruf als einen neuen AppendChunk-Vorgang und überschreibt die vorhandenen Daten. Wenn Sie auf Felder in anderen Recordset-Objekten zugreifen, die keine Klone des ersten Recordset-Objekts sind, werden die AppendChunk-Vorgänge nicht unterbrochen.

Verwenden Sie die GetChunk-Methode für ein Field-Objekt, um Teile oder alle seiner langen Binär- oder Zeichendaten abzurufen. In Situationen, in denen der Systemspeicher begrenzt ist, können Sie die GetChunk-Methode verwenden, um lange Werte in Teilen anstatt in ihrer Gesamtheit zu bearbeiten.

Die Daten, die ein GetChunk-Aufruf zurückgibt, werden einer Variablen zugewiesen. Wenn Size größer als die verbleibende Datenmenge ist, gibt die GetChunk-Methode nur die verbleibenden Daten zurück, ohne die Variable mit Leerzeichen aufzufüllen. Wenn das Feld leer ist, gibt die GetChunk-Methode einen Nullwert zurück.

Jeder nachfolgende GetChunk-Aufruf ruft Daten ab dem Punkt ab, wo der vorherige GetChunk-Anruf aufgehört hatte. Wenn Sie jedoch Daten aus einem Feld abrufen und dann den Wert eines anderen Felds im aktuellen Datensatz festlegen oder lesen, geht ADO davon aus, dass Sie das Abrufen von Daten aus dem ersten Feld abgeschlossen haben. Wenn Sie die GetChunk-Methode erneut für das erste Feld aufrufen, interpretiert ADO den Aufruf als neuen GetChunk-Vorgang und beginnt mit dem Lesen am Anfang der Daten. Der Zugriff auf Felder in anderen Recordset-Objekten, die keine Klone des ersten Recordset-Objekts sind, unterbricht GetChunk-Vorgänge nicht.

Wenn das adFldLong-Bit in der Attributes-Eigenschaft eines Field-Objekts auf True festgelegt ist, können Sie die GetChunk-Methode für dieses Feld verwenden.

Wenn kein aktueller Datensatz vorhanden ist, wenn Sie die Methode GetChunk oder AppendChunk für ein Field-Objekt verwenden, tritt der Fehler 3021 (kein aktueller Datensatz) auf.

Ein Beispiel für die Verwendung dieser Methoden zur Manipulation von Binärdaten finden Sie in den Beispielen AppendChunk-Methode und GetChunk-Methode in der ADO-Programmiererreferenz.