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 **
Erstellen Sie eine Klasse, die von der CADORecordBinding -Klasse abgeleitet wird.
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.
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. |