Freigeben über


Verwenden von Visual C++-Erweiterungen

Gilt für: Access 2013, Office 2013

Die IADORecordBinding-Schnittstelle

Die Microsoft Visual C++ Erweiterungen für ADO ordnen Felder eines Recordset-Objekts C/C++-Variablen zu oder binden sie. 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.

Durch die BindToRecordset -Methode der IADORecordBinding -Schnittstelle werden Felder an C/C++-Variablen gebunden. Durch die AddNew -Methode wird eine neue Zeile dem gebundenen Recordset hinzugefügt. Durch die Update -Methode werden Felder in neuen Zeilen des Recordset -Objekts mit dem Wert der C/C++-Variablen aufgefüllt oder Felder in vorhandenen Zeilen mit diesem Wert aktualisiert.

Die IADORecordBinding -Schnittstelle wird durch das Recordset -Objekt implementiert. Sie müssen den Code für die Implementierung nicht selbst schreiben.

Bindungseinträge

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

Die Parameter in diesen Makros werden von ADO intern einer DBBINDING -OLE DB-Struktur zugeordnet, und es wird ein Accessor -OLE DB-Objekt zum Verwalten der Verschiebung und Konvertierung von Daten zwischen Feldern und Variablen erstellt. Durch OLE DB werden Daten als aus drei Teilen bestehend definiert: ein Puffer, in dem die Daten gespeichert werden; ein Status, durch den angegeben wird, 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 OLE DB-Programmierreferenz, "Kapitel 6: Abrufen und Festlegen von Daten".)

Headerdatei

Schließen Sie die folgende Datei in die 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 Klasse, die von der CADORecordBinding -Klasse abgeleitet wird.

  2. Geben Sie Bindungseinträge und entsprechende C/C++-Variablen in der abgeleiteten Klasse an. Setzen Sie die Bindungseinträge zwischen den Makros BEGIN_ADO_BINDING und END_ADO_BINDING in Klammern. Beenden Sie die Makros nicht mit Kommas oder Semikolons. Die entsprechenden Trennzeichen werden automatisch durch die einzelnen Makros angegeben. Geben Sie einen Bindungseintrag für jedes Feld an, das einer C/C++-Variablen zugeordnet werden soll. Verwenden Sie ein entsprechendes Mitglied der Makrofamilie ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY oder ADO_VARIABLE_LENGTH_ENTRY.

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

Weitere Informationen finden Sie unter Visual C++-Erweiterungen (Beispiel).

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 mit den Methoden AddNew und Update keine Parameter der ADO-Methoden gleichen Namens angegeben werden.

Syntax

Durch die BindToRecordset -Methode werden die Recordset -Felder C/C++-Variablen zugeordnet.

BindToRecordset(CADORecordBinding *binding)

Durch die AddNew -Methode wird die gleichnamige ADO-Methode, AddNew, aufgerufen, um dem Recordset -Objekt eine neue Zeile hinzuzufügen.

AddNew(CADORecordBinding *binding)

Durch die Update-Methode wird die gleichnamige ADO-Methode, Update, aufgerufen, um das Recordset-Objekt zu aktualisieren.

Update(CADORecordBinding *binding)

Bindungseintragsmakros

Durch Bindungseintragsmakros wird die Zuordnung eines Recordset -Felds und einer Variablen definiert. Der Satz Bindungseinträge wird durch ein Anfangs- und ein Endmakro begrenzt.

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) werden Makrofamilien bereitgestellt. Alle numerischen Typen, mit Ausnahme von adVarNumeric, sind auch Typen mit fester Länge. Jede Familie enthält unterschiedliche Parametersätze, sodass Sie Bindungsinformationen, die nicht von Interesse sind, ausschließen können.

Weitere Informationen finden Sie unter OLE DB-Programmierreferenz, "Anhang A: Datentypen".

Bindungsanfangseinträge

BEGIN_ADO_BINDING(Klasse)

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 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)

Bindungsendeinträge

END_ADO_BINDING()

Parameter

Beschreibung

Klasse

Klasse, in der die Bindungseinträge und C/C++-Variablen definiert werden.

Ordinal

Ab Eins gezählte Ordnungszahl des Recordset-Felds, das der C/C++-Variablen entspricht.

DataType

Entsprechender ADO-Datentyp der C/C++-Variablen (eine Liste der gültigen Datentypen finden Sie unter DataTypeEnum). Der Wert des Recordset-Felds wird gegebenenfalls 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 Byte. Wenn Buffer eine Zeichenfolge mit variabler Länge enthält, lassen Sie Platz für eine Null am Ende.

Status

Name einer Variablen, durch die angegeben wird, 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 vom Typ VT_NULL und nicht lediglich leer). In der nächsten Tabelle, "Statuswerte", werden mögliche Werte für Status aufgelistet.

Modify

Boolesches Flag; durch TRUE wird angegeben, dass ADO das entsprechende Recordset-Feld mit dem in Buffer enthaltenen Wert aktualisieren darf. Legen Sie den booleschen modify-Parameter auf TRUE fest, um zu ermöglichen, dass das gebundene Feld durch ADO aktualisiert wird. Legen Sie ihn auf FALSE fest, wenn Sie das Feld untersuchen möchten, ohne es zu ändern.

Präzision

Anzahl der Ziffern, die in einer numerischen Variablen dargestellt werden können.

Scale

Anzahl der Dezimalstellen in einer numerischen Variablen.

Length

Name einer 4-Byte-Variablen, die die tatsächliche Länge der Daten in Buffer enthält.

Statuswerte

Durch den Wert der Status-Variablen wird angegeben, 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 Feldwert ungleich Null wurde zurückgegeben.

adFldBadAccessor

1

Bindung war ungültig.

adFldCantConvertValue

2

Wert konnte aus anderen Gründen als nicht übereinstimmenden Vorzeichen oder einem Datenüberlauf nicht konvertiert werden.

adFldNull

3

Beim Abrufen eines Felds wird angegeben, dass ein Nullwert zurückgegeben wurde. Beim Festlegen eines Felds wird angegeben, dass das Feld auf NULL festgelegt werden soll, wenn NULL selbst vom Feld nicht codiert werden kann (z. B. ein Zeichenarray oder eine Ganzzahl).

adFldTruncated

4

Daten mit variabler Länge oder numerische Ziffern wurden abgeschnitten.

adFldSignMismatch

5

Wert ist signiert und variabler Datentyp ist nicht signiert.

adFldDataOverFlow

6

Wert ist zu groß zum Speichern im variablen Datentyp.

adFldCantCreate

7

Unbekannter Spaltentyp und Feld bereits geöffnet.

adFldUnavailable

8

Feldwert konnte nicht ermittelt werden - z. B. in einem neuen nicht zugewiesenen Feld ohne Standardwert.

adFldPermissionDenied

9

Beim Aktualisieren keine Berechtigung zum Schreiben von Daten.

adFldIntegrityViolation

10

Beim Aktualisieren würde durch den Feldwert die Spaltenintegrität verletzt werden.

adFldSchemaViolation

11

Beim Aktualisieren würde durch den Feldwert das Spaltenschema verletzt werden.

adFldBadStatus

12

Beim Aktualisieren ungültiger Statusparameter.

adFldDefault

13

Beim Aktualisieren wurde ein Standardwert verwendet.