Freigeben über


Visual C++-Erweiterungen

Die IADORecordBinding-Schnittstelle

Die Microsoft Visual C++-Erweiterungen für ADO zuordnen oder binden Felder eines Recordset-Objekts Objekt zu C/C++-Variablen. Wenn sich die aktuelle Zeile des gebundenen Recordset ändert, werden alle gebundenen Felder im Recordset in die C/C++-Variablen kopiert. Bei Bedarf 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-oder aktualisiert Felder in vorhandenen Zeilen mit dem Wert der C/C++-Variablen.

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

Bindungseinträge

Die Visual C++-Erweiterungen für ADO ordnen Felder eines Recordset Objekt C/C++-Variablen zu. Die Definition einer Zuordnung zwischen einem Feld und einer Variablen wird als Bindungseintragbezeichnet. Makros stellen Bindungseinträge für numerische, feste und variable Daten bereit. Die Bindungseinträge und C/C++-Variablen werden in einer Klasse deklariert, die von der Visual C++-Extensions-Klasse abgeleitet ist, CADORecordBinding. 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 bestehend aus drei Teilen: ein Puffer, in dem die Daten gespeichert sind; ein Status, der angibt, ob ein Feld erfolgreich im Puffer gespeichert wurde oder wie die Variable im Feld wiederhergestellt werden soll; und die Länge der Daten. (Weitere Informationen finden Sie unter Abrufen und Festlegen von Daten (OLE DB)in der OLE DB-Programmierreferenz.)

Header-Datei

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 den Makros BEGIN_ADO_BINDING und END_ADO_BINDING ein. Beenden Sie die Makros nicht mit Kommas oder Semikolons. Die entsprechenden Trennzeichen werden automatisch von jedem 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_ENTRYoder ADO_VARIABLE_LENGTH_ENTRY Makrofamilie.

  3. Erstellen Sie in Ihrer Anwendung eine Instanz der Klasse, die von CADORecordBindingabgeleitet wurde. Rufen Sie die IADORecordBinding Schnittstelle von dem Recordsetab. 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, AddNewund Update. Das einzige Argument für jede Methode ist ein Zeiger auf eine Instanz der Klasse, die von CADORecordBindingabgeleitet wurde. Daher können die Methoden AddNew und Update keine Parameter ihrer Pendants der ADO-Methoden angeben.

Syntax

Die BindToRecordset--Methode ordnet das Recordset Felder C/C++-Variablen zu.

BindToRecordset(CADORecordBinding *binding)

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

AddNew(CADORecordBinding *binding)

Die Update-Methode ruft die gleichnamige ADO Update-Methode auf, um das Recordsetzu aktualisieren.

Update(CADORecordBinding *binding)

Bindungseintragsmakros

Makro für Bindungseinträge definiert die Zuordnung eines Recordset--Feldes und einer Variable. Ein Anfangs- und Endmakro begrenzt den Satz von Bindungseinträgen.

Makrofamilien werden für Daten mit fester Länge bereitgestellt, z. B. adDate- oder adBoolean-; numerische Daten wie adTinyInt, adInteger-oder adDouble-; und Daten mit variabler Länge, z. B. adChar-, adVarChar- oder adVarBinary. 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 Anhang A: Datentypender OLE DB-Programmierreferenz.

Beginne Bindungseinträge

BEGIN_ADO_BINDING(Klasse)

Fixed-Length Daten

ADO_FIXED_LENGTH_ENTRY(Ordinal, Datentyp, Puffer, Status, Ändern)

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

Numerische Daten

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

ADO_NUMERIC_ENTRY2(Ordinalzahl, Datentyp, Puffer, Präzision, Skalierung, Ändern)

Variable-Length Daten

ADO_VARIABLE_LENGTH_ENTRY(Ordinalzahl, Datentyp, Puffer, Größe, Status, Länge, Ändern)

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

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, Datentyp, Puffer, Größe, Länge, Ändern)

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

Ende der Bindungseinträge

END_ADO_BINDING()

Parameter Beschreibung
Klasse Klasse, in der die Bindungseinträge und C/C++-Variablen definiert sind.
Ordinal- Ordinale, beginnend bei eins, des -Recordset--Felds, das Ihrer C/C++-Variablen entspricht.
Datatype Äquivalenter ADO-Datentyp der C/C++-Variablen (siehe DataTypeEnum für eine Liste gültiger Datentypen). Der Wert des Recordset- Felds wird bei Bedarf in diesen Datentyp konvertiert.
Puffer Name der C/C++-Variablen, in der das Recordset- Feld gespeichert wird.
Größe Maximale Größe in Bytes des -Puffers. Wenn Buffer- eine Zeichenkette variabler Länge enthält, sorgen Sie für ausreichend Platz für einen Nullterminator.
Status Name einer Variablen, die angibt, ob der Inhalt Buffer gültig ist und ob die Konvertierung des Felds in Datentyp erfolgreich war.

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

Mögliche Werte für Status- werden in der nächsten Tabelle aufgelistet: "Statuswerte".
ändern Boolesche Kennzeichnung; Wenn TRUE, dann zeigt dies an, dass ADO das angegebene Recordset- Feld mit dem im Bufferenthaltenen Wert aktualisieren darf.

Legen Sie den -zu-ändernden-Parameter auf TRUE fest, damit ADO das gebundene Feld aktualisiert, und auf FALSE, wenn Sie das Feld untersuchen, es aber nicht ändern möchten.
Präzision Anzahl der Ziffern, die in einer numerischen Variablen dargestellt werden können.
Maßstab Anzahl der Dezimalstellen in einer numerischen Variablen.
Länge Name einer Vier-Byte-Variable, die die tatsächliche Länge der Daten in Bufferenthä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 Es wurde ein Nicht-NULL-Feldwert zurückgegeben.
adFldBadAccessor 1 Die Bindung war ungültig.
adFldCantConvertValue 2 Der Wert konnte aus anderen Gründen als zeichenkonflikten oder Datenüberlauf nicht konvertiert werden.
adFldNull 3 Gibt beim Abrufen eines Felds an, dass ein NULL-Wert zurückgegeben wurde.

Gibt beim Festlegen eines Felds an, dass das Feld auf NULL- festgelegt werden soll, wenn das Feld nicht NULL- selbst codieren kann (z. B. ein Zeichenarray oder eine ganze Zahl).
adFldTruncated 4 Daten mit variabler Länge oder numerische Ziffern wurden abgeschnitten.
adFldSignMismatch 5 Der Wert ist signiert, und der Datentyp der Variablen ist nicht signiert.
adFldDataOverFlow- 6 Der Wert ist größer als im Variablendatentyp gespeichert werden könnte.
adFldCantCreate 7 Unbekannter Spaltentyp und Feld sind bereits geöffnet.
FeldNichtVerfügbar 8 Feldwert konnte z. B. für ein neues, nicht zugewiesenes Feld ohne Standardwert nicht bestimmt werden.
adFldPermissionDenied 9 Beim Aktualisieren ist keine Berechtigung zum Schreiben von Daten vorhanden.
adFeldIntegritätsverletzung 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 ist der Statusparameter ungültig.
adFldDefault 13 Beim Aktualisieren wurde ein Standardwert verwendet.

Siehe auch

Visual C++-Erweiterungen (Beispiel)Visual C++-Erweiterungsheader