Teilen über


Funktionen des Treibers

In der folgenden Tabelle sind die Funktionen und Anweisungsattribute zusammengefasst, die ein ODBC 3.x-Treiber für block- und scrollbare Cursor implementieren sollte.

Funktion oder

Anweisungsattribut
Kommentare
SQL_ATTR_ROW_STATUS_PTR Legt die Adresse des Zeilenstatusarrays fest, das von SQLFetch und SQLFetchScroll ausgefüllt wird. Dieses Array wird auch von SQLSetPos gefüllt, wenn SQLSetPos im Anweisungszustand S6 aufgerufen wird. Wenn SQLSetPos im Status S7 aufgerufen wird, wird dieses Array nicht gefüllt, aber das Array, auf das das RowStatusArray-Argument von SQLExtendedFetch verweist, wird gefüllt. Weitere Informationen finden Sie unter Anweisungsübergänge in Anhang B: ODBC-Zustandsübergangstabellen.
SQL_ATTR_ROWS_FETCHED_PTR Legt die Adresse des Puffers fest, in dem SQLFetch und SQLFetchScroll die Anzahl der abgerufenen Zeilen zurückgeben. Wenn SQLExtendedFetch aufgerufen wird, wird dieser Puffer nicht gefüllt, aber das RowCountPtr-Argument verweist auf die Anzahl der abgerufenen Zeilen.
SQL_ATTR_ROW_ARRAY_SIZE Legt die von SQLFetch und SQLFetchScroll verwendete Rowsetgröße fest.
SQL_ROWSET_SIZE Legt die von SQLExtendedFetch verwendete Rowsetgröße fest. ODBC 3.x-Treiber implementieren dies, wenn sie mit ODBC 2.x-Anwendungen arbeiten möchten, die SQLExtendedFetch oder SQLSetPos aufrufen.
SQLBulkOperations Wenn ein ODBC 3.x-Treiber mit ODBC 2.x-Anwendungen funktionieren soll, die SQLSetPos mit einem Vorgang von SQL_ADD verwenden, muss der Treiber SQLSetPos mit einem Vorgang von SQL_ADD zusätzlich zu SQLBulkOperations mit einem Vorgang von SQL_ADD unterstützen.
SQLExtendedFetch Gibt das angegebene Rowset zurück. ODBC 3.x-Treiber implementieren dies, wenn sie mit ODBC 2.x-Anwendungen arbeiten möchten, die SQLExtendedFetch oder SQLSetPos aufrufen. Im Folgenden finden Sie Implementierungsdetails:

– Der Treiber ruft die Rowsetgröße aus dem Wert des attributs SQL_ROWSET_SIZE-Anweisung ab.
– Der Treiber ruft die Adresse des Zeilenstatusarrays aus dem RowStatusArray-Argument ab, nicht aus dem Attribut SQL_ATTR_ROW_STATUS_PTR-Anweisung. Das RowStatusArray-Argument in einem Aufruf von SQLExtendedFetch darf kein NULL-Zeiger sein. (Beachten Sie, dass das Attribut der SQL_ATTR_ROW_STATUS_PTR-Anweisung in ODBC 3.x ein NULL-Zeiger sein kann.)
– Der Treiber ruft die Adresse des abgerufenen Zeilenpuffers aus dem RowCountPtr-Argument ab, nicht das SQL_ATTR_ROWS_FETCHED_PTR-Anweisungsattribut.
- Der Treiber gibt SQLSTATE 01S01 (Fehler in Zeile) zurück, um anzugeben, dass ein Fehler aufgetreten ist, während Zeilen durch einen Aufruf von SQLExtendedFetch abgerufen wurden. Ein ODBC 3.x-Treiber sollte SQLSTATE 01S01 (Fehler in Zeile) nur zurückgeben, wenn SQLExtendedFetch aufgerufen wird, nicht, wenn SQLFetch oder SQLFetchScroll aufgerufen wird. Wenn SQLSTATE 01S01 (Fehler in Zeile) von SQLExtendedFetch zurückgegeben wird, sortiert der Treiber-Manager keine Statusdatensätze in der Fehlerwarteschlange gemäß den Regeln, die im Abschnitt "Sequenz der Statusdatensätze" von SQLGetDiagField angegeben sind, um die Abwärtskompatibilität zu gewährleisten.
SQLFetch Gibt das nächste Rowset zurück. Im Folgenden finden Sie Implementierungsdetails:

– Der Treiber ruft die Rowsetgröße aus dem Wert des attributs SQL_ATTR_ROW_ARRAY_SIZE-Anweisung ab.
– Der Treiber ruft die Adresse des Zeilenstatusarrays aus dem attribut SQL_ATTR_ROW_STATUS_PTR-Anweisung ab.
– Der Treiber ruft die Adresse des abgerufenen Zeilenpuffers aus dem attribut SQL_ATTR_ROWS_FETCHED_PTR-Anweisung ab.
– Die Anwendung kann Aufrufe zwischen SQLFetchScroll und SQLFetch kombinieren.
- SQLFetch gibt Lesezeichen zurück, wenn Spalte 0 gebunden ist.
- SQLFetch kann aufgerufen werden, um mehr als eine Zeile zurückzugeben.
– Der Treiber gibt SQLSTATE 01S01 (Fehler in Zeile) nicht zurück, um anzugeben, dass ein Fehler aufgetreten ist, während Zeilen durch einen Aufruf von SQLFetch abgerufen wurden.
SQLFetchScroll Gibt das angegebene Rowset zurück. Im Folgenden finden Sie Implementierungsdetails:

– Der Treiber ruft die Rowsetgröße aus dem Attribut der SQL_ATTR_ROW_ARRAY_SIZE-Anweisung ab.
– Der Treiber ruft die Adresse des Zeilenstatusarrays aus dem attribut SQL_ATTR_ROW_STATUS_PTR-Anweisung ab.
– Der Treiber ruft die Adresse des abgerufenen Zeilenpuffers aus dem attribut SQL_ATTR_ROWS_FETCHED_PTR-Anweisung ab.
– Die Anwendung kann Aufrufe zwischen SQLFetchScroll und SQLFetch kombinieren.
– Der Treiber gibt SQLSTATE 01S01 (Fehler in Zeile) nicht zurück, um anzugeben, dass ein Fehler aufgetreten ist, während Zeilen durch einen Aufruf von SQLFetchScroll abgerufen wurden.
SQLSetPos Führt verschiedene positionierte Vorgänge aus. Im Folgenden finden Sie Implementierungsdetails:

- Dies kann in den Anweisungszuständen S6 oder S7 genannt werden. Weitere Informationen finden Sie unter Anweisungsübergänge in Anhang B: ODBC-Zustandsübergangstabellen.
- Wenn dies im Anweisungszustand S5 oder S6 genannt wird, ruft der Treiber die Rowsetgröße aus dem attribut der SQL_ATTR_ROWS_FETCHED_PTR-Anweisung und die Adresse des Zeilenstatusarrays aus dem SQL_ATTR_ROW_STATUS_PTR-Anweisungsattribut ab.
- Wenn dies im Anweisungszustand S7 genannt wird, ruft der Treiber die Rowsetgröße aus dem attribut der SQL_ROWSET_SIZE-Anweisung und die Adresse des Zeilenstatusarrays aus dem RowStatusArray-Argument von SQLExtendedFetch ab.
- Der Treiber gibt SQLSTATE 01S01 (Fehler in Zeile) nur zurück, um anzugeben, dass ein Fehler aufgetreten ist, während Zeilen durch einen Aufruf von SQLSetPos abgerufen wurden, um einen Massenvorgang auszuführen, wenn die Funktion im Zustand S7 aufgerufen wird. Wenn SQLSTATE 01S01 (Fehler in Zeile) von SQLSetPos zurückgegeben wird, werden vom Treiber-Manager keine Statusdatensätze in der Fehlerwarteschlange gemäß den Regeln sortiert, die im Abschnitt "Sequenz der Statusdatensätze" von SQLGetDiagField angegeben sind, um die Abwärtskompatibilität zu gewährleisten.
- Wenn der Treiber mit ODBC 2.x-Anwendungen funktionieren soll, die SQLSetPos mit dem Argument Operation SQL_ADD aufrufen, muss der Treiber SQLSetPos mit dem Argument Operation SQL_ADD unterstützen.