Dynaset
In diesem Thema werden Dynasets beschrieben und ihre Verfügbarkeit erläutert.
Hinweis
Dieses Thema bezieht sich auf die MFC ODBC-Klassen, einschließlich CRecordset. Informationen zu Dynasets in den DAO-Klassen finden Sie unter "CDaoRecordset". Mit DAO können Sie Recordsets vom Typ "dynaset" öffnen.
Ein Dynaset ist ein Recordset mit dynamischen Eigenschaften. Während der Lebensdauer bleibt ein Recordsetobjekt im Dynaset-Modus (in der Regel als Dynaset bezeichnet) auf folgende Weise mit der Datenquelle synchronisiert. In einer Mehrbenutzerumgebung können andere Benutzer Datensätze bearbeiten oder löschen, die sich in Ihrem Dynaset befinden, oder Datensätze zur Tabelle hinzufügen, die Ihr Dynaset darstellt. Zeichnet auf, dass ihre Anwendung dem Recordset hinzugefügt oder gelöscht wird, in Ihrem Dynaset widerzuspiegeln. Datensätze, die andere Benutzer der Tabelle hinzufügen, werden erst dann in Ihrem Dynaset widerzuspiegeln, wenn Sie das Dynaset neu erstellen, indem Sie die Requery
Memberfunktion aufrufen. Wenn andere Benutzer Datensätze löschen, überspringt MFC-Code die Löschungen in Ihrem Recordset. Die Bearbeitungsänderungen anderer Benutzer an vorhandenen Datensätzen werden in Ihrem Dynaset wiedergegeben, sobald Sie zum betroffenen Datensatz scrollen.
Ebenso werden Bearbeitungen, die Sie an Datensätzen in einem Dynaset vornehmen, in Dynasets angezeigt, die von anderen Benutzern verwendet werden. Datensätze, die Sie hinzufügen, werden erst dann in den Dynasets anderer Benutzer wiedergegeben, wenn sie ihre Dynasets erneut abfragen. Datensätze, die Sie löschen, werden in den Recordsets anderer Benutzer als "gelöscht" markiert. Wenn Sie über mehrere Verbindungen mit derselben Datenbank (mehrere CDatabase
Objekte) verfügen, weisen Recordsets, die diesen Verbindungen zugeordnet sind, denselben Status wie die Recordsets anderer Benutzer auf.
Dynasets sind am wertvollsten, wenn Daten dynamisch sein müssen, wie z. B. in einem Fluglinienreservierungssystem.
Hinweis
Um Dynasets zu verwenden, müssen Sie über einen ODBC-Treiber für Ihre Datenquelle verfügen, der Dynasets unterstützt, und die ODBC-Cursorbibliothek darf nicht geladen werden. Weitere Informationen finden Sie unter Verfügbarkeit von Dynasets.
Um anzugeben, dass ein Recordset ein Dynaset ist, übergeben Sie CRecordset::dynaset
als ersten Parameter an die Open
Memberfunktion des Recordset-Objekts.
Hinweis
Für aktualisierbare Dynasets muss Ihr ODBC-Treiber entweder positionierte Updateanweisungen oder die ::SQLSetPos
ODBC-API-Funktion unterstützen. Wenn beides unterstützt wird, verwendet ::SQLSetPos
MFC zur Effizienz.
Verfügbarkeit von Dynasets
Die MFC-Datenbankklassen unterstützen Dynasets, wenn die folgenden Anforderungen erfüllt sind:
Die DLL der ODBC-Cursorbibliothek darf für diese Datenquelle nicht verwendet werden.
Wenn die Cursorbibliothek verwendet wird, maskiert sie einige Funktionen des zugrunde liegenden ODBC-Treibers, der für die Dynaset-Unterstützung erforderlich ist. Wenn Sie Dynasets verwenden möchten (und Ihr ODBC-Treiber über die für Dynasets erforderliche Funktionalität verfügt, wie im restlichen Abschnitt beschrieben), können Sie dazu führen, dass MFC die Cursorbibliothek beim Erstellen eines
CDatabase
Objekts nicht lädt. Weitere Informationen finden Sie unter ODBC und die OpenEx - oder Open-Memberfunktion der KlasseCDatabase
.In der ODBC-Terminologie werden Dynasets und Momentaufnahme als Cursor bezeichnet. Ein Cursor ist ein Mechanismus, der zum Nachverfolgen seiner Position in einem Recordset verwendet wird.
Der ODBC-Treiber für Ihre Datenquelle muss keysetgesteuerte Cursor unterstützen.
Keysetgesteuerte Cursor verwalten Daten aus einer Tabelle, indem sie eine Reihe von Schlüsseln abrufen und speichern. Die Schlüssel werden verwendet, um aktuelle Daten aus der Tabelle abzurufen, wenn der Benutzer zu einem bestimmten Datensatz scrollt. Um festzustellen, ob Ihr Treiber diese Unterstützung bereitstellt, rufen Sie die
::SQLGetInfo
ODBC-API-Funktion mit dem SQL_SCROLL_OPTIONS-Parameter auf.Wenn Sie versuchen, ein Dynaset ohne Keysetunterstützung zu öffnen, erhalten Sie einen
CDBException
mit dem Rückgabecodewert AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.Der ODBC-Treiber für Ihre Datenquelle muss das erweiterte Abrufen unterstützen.
Das erweiterte Abrufen ist die Möglichkeit, rückwärts und vorwärts über die resultierenden Datensätze Ihrer SQL-Abfrage zu scrollen. Rufen Sie die
::SQLGetFunctions
ODBC-API-Funktion mit dem parameter SQL_API_SQLEXTENDEDFETCH auf, um festzustellen, ob Ihr Treiber diese Funktion unterstützt.
Wenn Sie aktualisierbare Dynasets (oder Momentaufnahme s) benötigen, muss Ihr ODBC-Treiber auch die ::SQLSetPos
ODBC-API-Funktion oder positionierte Updates unterstützen. Mit ::SQLSetPos
der Funktion kann MFC die Datenquelle aktualisieren, ohne SQL-Anweisungen zu senden. Wenn diese Unterstützung verfügbar ist, verwendet MFC sie vor dem Vornehmen von Updates mit SQL. Um zu ermitteln, ob Ihr Treiber unterstützt ::SQLSetPos
wird, rufen Sie ::SQLGetInfo
mit dem parameter SQL_POS_OPERATIONS auf.
Positionierte Updates verwenden die SQL-Syntax (des Formulars WHERE CURRENT OF<cursorname>), um eine bestimmte Zeile in der Tabelle in der Datenquelle zu identifizieren. Rufen Sie mit dem parameter SQL_POSITIONED_STATEMENTS auf::SQLGetInfo
, um festzustellen, ob der Treiber positionierte Updates unterstützt.
Im Allgemeinen erfordern MFC-Dynasets (aber nicht forward-only Recordsets) einen ODBC-Treiber mit API-Konformität der Ebene 2. Wenn der Treiber für Ihre Datenquelle dem API-Satz der Ebene 1 entspricht, können Sie weiterhin sowohl aktualisierbare als auch schreibgeschützte Momentaufnahme s und Vorwärtsrecordsets verwenden, jedoch keine Dynasets. Ein Treiber der Ebene 1 kann jedoch Dynasets unterstützen, wenn er erweiterte Abruf- und Keyset-gesteuerte Cursor unterstützt. Weitere Informationen zu ODBC-Konformitätsstufen finden Sie unter ODBC.
Hinweis
Wenn Sie sowohl Momentaufnahme als auch Dynasets verwenden möchten, müssen Sie diese auf zwei verschiedenen CDatabase
Objekten (zwei verschiedene Verbindungen) basieren.
Im Gegensatz zu Momentaufnahme, die zwischenspeichern, Standard von der ODBC-Cursorbibliothek enthalten sind, ruft Dynasets einen Datensatz direkt aus der Datenquelle ab, sobald Sie zu der Datenquelle scrollen. Dadurch werden die Datensätze beibehalten, die ursprünglich vom Dynaset mit der Datenquelle synchronisiert wurden.
Eine Liste der in dieser Version von Visual C++ mitgelieferten ODBC-Treiber sowie Informationen über den Erwerb zusätzlicher Treiber finden Sie unter Liste der ODBC-Treiber.