Share via


Visual C++-Erweiterungen

Die IADORecordBinding-Schnittstelle

Die Microsoft Visual C++-Erweiterungen für ADO ordnen Felder eines Recordset-Objekts C/C++-Variablen zu (binden sie). Wenn sich die aktuelle Zeile des gebundenen Recordset ändert, werden alle gebundenen Felder im Recordset in die C/C++-Variablen kopiert. Falls erforderlich, werden die kopierten Daten in den deklarierten Datentyp der C/C++-Variablen konvertiert.

Die BindToRecordset-Methode der IADORecordBinding-Schnittstelle bindet Felder an C/C++-Variablen. Die AddNew-Methode fügt dem gebundenen Recordset eine neue Zeile hinzu. Die Update-Methode füllt Felder in neuen Zeilen des Recordset mit dem Wert der C/C++-Variablen auf oder aktualisiert Felder in vorhandenen Zeilen.

Die IADORecordBinding-Schnittstelle wird vom Recordset-Objekt implementiert. Sie programmieren die Implementierung nicht selbst.

Bindungseinträge

Die Visual C++-Erweiterungen für ADO ordnen Felder eines Recordset-Objekts C/C++-Variablen zu. Die Definition einer Zuordnung zwischen einem Feld und einer Variablen wird als Bindungseintrag bezeichnet. Makros stellen Bindungseinträge für numerische Daten und Daten mit fester und variabler Länge bereit. Die Bindungseinträge und C/C++-Variablen werden in einer Klasse deklariert, die von der Klasse CADORecordBinding der Visual C++-Erweiterungen abgeleitet ist. Die CADORecordBinding-Klasse wird intern durch die Bindungseintragsmakros definiert.

ADO ordnet die Parameter in diesen Makros intern einer OLE DB-DBBINDING-Struktur zu und erstellt ein OLE DB-Accessor-Objekt, um die Bewegung und Konvertierung von Daten zwischen Feldern und Variablen zu verwalten. OLE DB definiert Daten als aus drei Teilen bestehend: einem Puffer, in dem die Daten gespeichert werden; einem Status, der angibt, ob ein Feld erfolgreich im Puffer gespeichert wurde oder wie die Variable in das Feld wiederhergestellt werden soll; und der Länge der Daten. (Weitere Informationen finden Sie unter Getting and Setting Data (OLE DB) in der „OLE DB Programmer‘s Reference“.)

Headerdatei

Fügen Sie die folgende Datei in Ihre Anwendung ein, um die Visual C++-Erweiterungen für ADO zu verwenden:

#include <icrsint.h>

Binden von Recordset-Feldern

So binden Sie Recordset-Felder an C/C++-Variablen

  1. Erstellen Sie eine von der CADORecordBinding-Klasse abgeleitete Klasse.

  2. Geben Sie Bindungseinträge und entsprechende C/C++-Variablen in der abgeleiteten Klasse an. Klammern Sie die Bindungseinträge zwischen BEGIN_ADO_BINDING- und END_ADO_BINDING-Makros. Beenden Sie die Makros nicht mit Kommas oder Semikolons. Entsprechende Trennzeichen werden automatisch durch jedes Makro angegeben.

    Geben Sie einen Bindungseintrag für jedes Feld an, das einer C/C++-Variablen zugeordnet werden soll. Verwenden Sie ein entsprechendes Element aus der ADO_FIXED_LENGTH_ENTRY-, ADO_NUMERIC_ENTRY- oder ADO_VARIABLE_LENGTH_ENTRY-Makrofamilie.

  3. Erstellen Sie in Ihrer Anwendung eine Instanz der von CADORecordBinding abgeleiteten Klasse. Rufen Sie die IADORecordBinding-Schnittstelle aus dem Recordset ab. Rufen Sie dann die BindToRecordset-Methode auf, um die Recordset-Felder an die C/C++-Variablen zu binden.

Weitere Informationen finden Sie im Beispiel für Visual C++-Erweiterungen.

Schnittstellenmethoden

Die IADORecordBinding-Schnittstelle verfügt über drei Methoden: BindToRecordset, AddNew und Update. Das einzige Argument für jede Methode ist ein Zeiger auf eine Instanz der von CADORecordBinding abgeleiteten Klasse. Daher können die Methoden AddNew und Update keine Parameter ihrer namensgebenden ADO-Methoden angeben.

Syntax

Die BindToRecordset-Methode verknüpft die Recordset-Felder mit C/C++-Variablen.

BindToRecordset(CADORecordBinding *binding)

Die AddNew-Methode ruft ihre namensgebende Methode, die ADO-AddNew-Methode auf, um dem Recordset eine neue Zeile hinzuzufügen.

AddNew(CADORecordBinding *binding)

Die Update-Methode ruft ihre namensgebende Methode, die ADO-Update-Methode auf, um den Recordset zu aktualisieren.

Update(CADORecordBinding *binding)

Bindungseintragsmakros

Bindungseintragsmakros definieren die Zuordnung eines Recordset-Felds und einer Variablen. Ein Anfangs- und Endmakro trennt die Reihe von Bindungseinträgen.

Makrofamilien werden für Daten mit fester Länge (z. B. adDate oder adBoolean), numerische Daten (z. B. adTinyInt, adInteger oder adDouble) und Daten mit variabler Länge (z. B. adChar, adVarChar oder adVarBinary) bereitgestellt. Alle numerischen Typen, mit Ausnahme von adVarNumeric, sind auch Typen mit fester Länge. Jede Familie verfügt über unterschiedliche Parametersätze, sodass Sie Bindungsinformationen ausschließen können, die nicht von Interesse sind.

Weitere Informationen finden Sie in Appendix A: Data Types der „OLE DB Programmer's Reference“.

Bindungseinträge beginnen

BEGIN_ADO_BINDING(Class)

Daten mit fester Länge

ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

Numerische Daten

ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)

ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)

Daten mit variabler Länge

ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)

Bindungseinträge beenden

END_ADO_BINDING()

Parameter Beschreibung
Klasse Klasse, in der die Bindungseinträge und C/C++-Variablen definiert sind.
Ordinal Ordnungszahl, Zählung von eins, des Recordset-Felds, das Ihrer C/C++-Variablen entspricht.
DataType Gleichwertiger ADO-Datentyp der C/C++-Variablen (eine Liste gültiger Datentypen finden Sie unter DataTypeEnum). Der Wert des Recordset-Felds wird bei Bedarf in diesen Datentyp konvertiert.
Buffer Name der C/C++-Variablen, in der das Recordset-Feld gespeichert wird.
Größe Maximale Größe von Buffer in Bytes. Wenn Buffer eine Zeichenfolge mit variabler Länge enthält, lassen Sie Platz für einen abschließenden Nullwert.
Status Name einer Variablen, die angibt, ob der Inhalt von Buffer gültig ist und ob die Konvertierung des Felds in DataType erfolgreich war.

Die beiden wichtigsten Werte für diese Variable sind adFldOK (die Konvertierung war erfolgreich) und adFldNull (der Wert des Felds wäre ein VARIANT-Wert vom Typ VT_NULL und nicht nur leer).

Mögliche Werte für Status werden in der nächsten Tabelle, „Statuswerte“, aufgeführt.
Modify Boolesches Flag; TRUE gibt an, dass ADO das entsprechende Recordset-Feld mit dem in Buffer enthaltenen Wert aktualisieren darf.

Legen Sie den booleschen Parameter Modify auf TRUE fest, um ADO das Aktualisieren des gebundenen Felds zu ermöglichen, und auf FALSE, wenn Sie das Feld untersuchen, aber nicht ändern möchten.
Genauigkeit Anzahl der Ziffern, die in einer numerischen Variablen dargestellt werden können.
Skalieren Anzahl der Dezimalstellen in einer numerischen Variablen.
Länge Name einer Vier-Byte-Variablen, die die tatsächliche Länge der Daten in Buffer enthält.

Statuswerte

Der Wert der Variablen Status gibt an, ob ein Feld erfolgreich in eine Variable kopiert wurde.

Beim Festlegen von Daten kann Status auf adFldNull festgelegt werden, um anzugeben, dass das Recordset-Feld auf NULL festgelegt werden soll.

Konstante Wert Beschreibung
adFldOK 0 Ein Nicht-Null-Feldwert wurde zurückgegeben.
adFldBadAccessor 1 Die Bindung war ungültig.
adFldCantConvertValue 2 Der Wert kann nicht konvertiert werden. Dieses Problem tritt nicht aufgrund nicht übereinstimmender Vorzeichen oder eines Datenüberlaufs auf.
adFldNull 3 Beim Abrufen eines Felds wird ein Nullwert zurückgegeben.

Beim Festlegen eines Felds sollte das Feld auf NULL festgelegt werden, wenn das Feld NULL nicht selbst codieren kann (z. B. ein Zeichenarray oder eine ganze Zahl).
adFldTruncated 4 Variablenlängendaten oder Ziffern wurden abgeschnitten.
adFldSignMismatch 5 Wert ist signiert und variabler Datentyp ist nicht signiert.
adFldDataOverFlow 6 Der Wert ist größer als im Variablendatentyp gespeichert werden könnte.
adFldCantCreate 7 Unbekannter Spaltentyp und Feld bereits geöffnet.
adFldUnavailable 8 Der Feldwert konnte nicht bestimmt werden, z. B. auf einem neuen, nicht zugewiesenen Feld ohne Standardwert.
adFldPermissionDenied 9 Beim Aktualisieren dürfen keine Daten geschrieben werden.
adFldIntegrityViolation 10 Beim Aktualisieren würde der Feldwert gegen die Spaltenintegrität verstoßen.
adFldSchemaViolation 11 Beim Aktualisieren würde der Feldwert gegen das Spaltenschema verstoßen.
adFldBadStatus 12 Beim Aktualisieren ungültiger Statusparameter.
adFldDefault 13 Beim Aktualisieren wurde ein Standardwert verwendet.

Weitere Informationen

Visual C++-Erweiterungen – BeispielVisual C++-Erweiterungsheader