ODBC: Die ODBC-Cursorbibliothek
In diesem Thema wird die ODBC-Cursorbibliothek beschrieben und erläutert, wie sie verwendet wird. Weitere Informationen finden Sie unter:
Die ODBC-Cursorbibliothek ist eine DLL (Dynamic Link Library), die sich zwischen dem ODBC-Treiber-Manager und dem Treiber befindet. In ODBC-Ausdrücken verwaltet ein Treiber einen Cursor, um seine Position im Recordset nachzuverfolgen. Der Cursor markiert die Position in dem Recordset, zu dem Sie bereits scrollen – den aktuellen Datensatz.
Cursorbibliothek und ODBC-Treiber der Ebene 1
Die ODBC-Cursorbibliothek bietet Treibern der Ebene 1 die folgenden neuen Funktionen:
Vorwärts- und Rückwärtslauf. Treiber der Ebene 2 benötigen die Cursorbibliothek nicht, da sie bereits bildlauffähig sind.
Unterstützung für Momentaufnahmen. Die Cursorbibliothek verwaltet einen Puffer, der die Datensätze der Momentaufnahme enthält. Dieser Puffer spiegelt die Löschungen und Bearbeitungen ihres Programms an Datensätzen wider, jedoch nicht die Ergänzungen, Löschungen oder Bearbeitungen anderer Benutzer. Daher ist die Momentaufnahme nur so aktuell wie der Puffer der Cursorbibliothek. Der Puffer spiegelt auch ihre eigenen Ergänzungen erst wider, wenn Sie aufrufen
Requery
. Dynasets verwenden die Cursorbibliothek nicht.
Die Cursorbibliothek bietet Momentaufnahmen (statische Cursor), auch wenn sie von Ihrem Treiber normalerweise nicht unterstützt werden. Wenn Ihr Treiber bereits statische Cursor unterstützt, müssen Sie die Cursorbibliothek nicht laden, um die Momentaufnahmeunterstützung zu erhalten. Wenn Sie die Cursorbibliothek verwenden, können Sie nur Momentaufnahmen und Vorwärtsrecordsets verwenden. Wenn Ihr Treiber Dynasets (KEYSET_DRIVEN Cursor) unterstützt und Sie sie verwenden möchten, dürfen Sie die Cursorbibliothek nicht verwenden. Wenn Sie sowohl Momentaufnahmen als auch Dynasets verwenden möchten, müssen Sie diese auf zwei verschiedenen CDatabase
Objekten (zwei verschiedene Verbindungen) basieren, es sei denn, Ihr Treiber unterstützt beide.
Positionierte Aktualisierungen und Zeitstempelspalten
Hinweis
Auf ODBC-Datenquellen können Sie über die MFC-ODBC-Klassen zugreifen, wie in diesem Thema beschrieben, oder über die MFC-Datenzugriffsobjekt-Klassen (DAO-Klassen).
Hinweis
Wenn Ihr ODBC-Treiber unterstützt SQLSetPos
, den MFC verwendet, falls verfügbar, gilt dieses Thema nicht für Sie.
Die meisten Treiber der Ebene 1 unterstützen keine positionierten Updates. Solche Faktoren basieren auf der Cursorbibliothek, um die Funktionen von Treibern der Ebene 2 in dieser Hinsicht zu emulieren. Die Cursorbibliothek emuliert die Unterstützung für positionierte Aktualisierungen, indem eine durchsuchte Aktualisierung für die nicht veränderten Felder ausgeführt wird.
In einigen Fällen kann ein Recordset eine Zeitstempelspalte als eines dieser nicht geänderten Felder enthalten. Bei der Verwendung von MFC-Recordsets mit Tabellen, die Zeitstempelspalten enthalten, treten zwei Probleme auf.
Das erste Problem betrifft aktualisierbare Momentaufnahmen in Tabellen mit Zeitstempelspalten. Wenn die Tabelle, an die Ihre Momentaufnahme gebunden ist, eine Zeitstempelspalte enthält, sollten Sie nach dem Aufruf Edit
und Requery
Update
. Wenn nicht, können Sie denselben Datensatz möglicherweise nicht erneut bearbeiten. Beim Aufrufen Edit
und anschließend Update
wird der Datensatz in die Datenquelle geschrieben, und die Zeitstempelspalte wird aktualisiert. Wenn Sie nicht aufrufen Requery
, entspricht der Zeitstempelwert für den Datensatz in Ihrer Momentaufnahme nicht mehr dem entsprechenden Zeitstempel für die Datenquelle. Wenn Sie versuchen, den Datensatz erneut zu aktualisieren, kann die Datenquelle das Update aufgrund der Fehlenden Übereinstimmung nicht zulassen.
Das zweite Problem betrifft Einschränkungen der Klasse CTime , wenn sie mit der RFX_Date
Funktion verwendet wird, um Zeit- und Datumsinformationen in oder aus einer Tabelle zu übertragen. Die Verarbeitung des CTime
Objekts führt zu einem gewissen Aufwand in Form einer zusätzlichen Zwischenverarbeitung während der Datenübertragung. Der Datumsbereich von CTime
Objekten kann auch für einige Anwendungen zu begrenzt sein. Eine neue Version der RFX_Date
Funktion verwendet einen ODBC-TIMESTAMP_STRUCT Parameter anstelle eines CTime
Objekts. Weitere Informationen finden Sie in RFX_Date
Makros und Globalen in der MFC-Referenz.
Verwenden der Cursorbibliothek
Wenn Sie eine Verbindung mit einer Datenquelle herstellen – durch Aufrufen von CDatabase::OpenEx oder CDatabase::Open – können Sie angeben, ob die Cursorbibliothek für die Datenquelle verwendet werden soll. Wenn Sie Momentaufnahmen für diese Datenquelle erstellen, geben Sie die CDatabase::useCursorLib
Option im dwOptions
Parameter an, um OpenEx
WAHR für den bUseCursorLib-Parameter anzugeben Open
(der Standardwert ist TRUE). Wenn Ihr ODBC-Treiber Dynasets unterstützt und Sie Dynasets für die Datenquelle öffnen möchten, verwenden Sie nicht die Cursorbibliothek (es maskiert einige Treiberfunktionen, die für Dynasets erforderlich sind). Geben Sie CDatabase::useCursorLib
in diesem Fall nicht false OpenEx
für den bUseCursorLib-Parameter in Open
.