Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Öffnet das Recordset durch das Abrufen der Tabelle oder Ausführen der Abfrage, die das Recordset darstellt.
virtual BOOL Open(
UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
LPCTSTR lpszSQL = NULL,
DWORD dwOptions = none
);
Parameter
nOpenType
Übernehmen Sie den Standardwert, AFX_DB_USE_DEFAULT_TYPE, oder verwenden Sie einen der folgenden Werte aus enum OpenType:Recordset CRecordset::dynaset A mit bidirektionalem Bildlauf.Die Mitgliedschaft und die Reihenfolge der Datensätze werden bestimmt, wenn das Recordset geöffnet ist, die Änderungen, die von anderen Benutzern an den Datenwerten vorgenommen werden, sind sichtbar, einem Abrufvorgang einsetzen.Dynasets sind auch als keysetgesteuerte Recordsets.
Statisches Recordset CRecordset::snapshot A mit bidirektionalem Bildlauf.Die Mitgliedschaft und die Reihenfolge der Datensätze werden bestimmt, wenn das Recordset geöffnet ist, die Datenwerte werden bestimmt, wenn die Datensätze abgerufen werden.Die Änderungen, die von anderen Benutzern vorgenommen werden, sind nicht sichtbar, wenn das Recordset geschlossen wird und dann erneut geöffnet.
Recordset CRecordset::dynamic A mit bidirektionalem Bildlauf.Die Änderungen, die von anderen Benutzern an der Mitgliedschaft, an der Reihenfolge und an den Datenwerten vorgenommen werden, sind sichtbar, einem Abrufvorgang einsetzen.Beachten Sie, dass viele ODBC-Treiber diesen Typ nicht des Recordsets unterstützen.
Schreibgeschütztes Recordset CRecordset::forwardOnly A mit nur vorwärts Bildlauf.
Für CRecordset ist der Standardwert CRecordset::snapshot.Der Standardwertmechanismus ermöglicht den Visual C++-Assistenten, um CRecordset mit ODBC und DAO CDaoRecordset zu interagieren, die verschiedene Standards haben.
Weitere Informationen zu diesen Recordsettypen, finden Sie im Artikel Recordsets (ODBC).Weitere Informationen finden Sie im Artikel "Verwenden des Blocks und der bildlauffähigen Cursor" in Windows SDK.
VorsichtWenn der angeforderten Typ nicht unterstützt wird, löst das Framework eine Ausnahme aus.
lpszSQL
Ein Zeichenfolgenzeiger, der einen der folgenden enthält:Ein NULL Zeiger.
Der Name einer Tabelle.
Eine Anweisung SQL SELECT (optional mit einem SQL WHERE oder ORDER BY-Klausel).
Eine CALL-Anweisung, die den Namen einer vordefinierten Abfrage (gespeicherte Prozedur) angibt.Achten Sie darauf, dass Sie keinen Leerraum zwischen den geschweiften Klammern und dem CALL-Schlüsselwort einfügen.
Weitere Informationen über diese Zeichenfolge, finden Sie die Tabelle und die Erläuterung ClassWizards Rolle unter Hinweisen.
HinweisDie Reihenfolge der Spalten in einem Resultset muss die Reihenfolge des RFX oder die Massenrfx-funktions-Aufrufe in der DoFieldExchange oder DoBulkFieldExchange Überschreibung Funktion entsprechen.
dwOptions
Eine Bitmaske, die eine Kombination der Werte angeben kann, prüfen Sie unten auf.Einige dieser sich gegenseitig aus.Der Standardwert ist none.CRecordset::none keine Optionen festgelegt.Dieser Parameterwert schließen sich gegenseitig mit allen anderen Werten.Standardmäßig kann das Recordset mit Bearbeiten oder Löschen aktualisiert werden und ermöglicht das Anfügen von Datensätzen mit AddNew.Updatability hängt von der Datenquelle ab sowie auf der nOpenType Option geben Sie an.Optimierung für Massenhinzufügungen ist nicht verfügbar.Gesammeltes Abrufen von Zeilen nicht implementiert wird.Gelöschte Datensätze werden nicht während der Recordsetnavigation übersprungen.Lesezeichen sind nicht verfügbar.Automatische geänderte Feldüberprüfung implementiert wird.
CRecordset::appendOnly lassen keine Bearbeiten oder Löschen im Recordset.Lassen Sie nur AddNew.Diese Option ist schließen einander aus CRecordset::readOnly.
CRecordset::readOnly öffnen das Recordset, als schreibgeschützt.Diese Option ist schließen einander aus CRecordset::appendOnly.
CRecordset::optimizeBulkAdd verwendet eine vorbereitete SQL-Anweisung, zahlreiche Datensätze gleichzeitig hinzufügen zu optimieren.Gilt nur, wenn Sie nicht die ODBC-API-Funktion SQLSetPos verwenden, um das Recordset zu aktualisieren.Das erste Update bestimmt, welche Felder als geänderte sind.Diese Option ist schließen einander aus CRecordset::useMultiRowFetch.
CRecordset::useMultiRowFetch Werkzeuggesammeltes abrufen von zeilen, um in einem einzelnen Abrufvorgang abgerufen werden Zeilen zuzulassen aus mehreren.Dies ist ein erweitertes Feature, die entworfen wurde, um die Leistung zu verbessern, Allerdings wird der nicht von Klassen-Assistent unterstützt.Diese Option ist schließen einander aus CRecordset::optimizeBulkAdd.Beachten Sie, dass Sie CRecordset::useMultiRowFetch angeben, wird die Option CRecordset::noDirtyFieldCheck automatisch aktiviert (doppelte Pufferung ist nicht verfügbar); in Vorwärts-Recordsets ist die Option CRecordset::useExtendedFetch automatisch aktiviert.Weitere Informationen über das gesammelte Abrufen von Zeilen, finden Sie im Artikel Recordset: Datensätzen in einer Sammeloperation (ODBC).
CRecordset::skipDeletedRecords Schritt alle gelöschten Datensätze beim Navigieren durch das Recordset.Dies verlangsamt die Leistung in bestimmten relativen Abrufen.Diese Option ist in Vorwärts-Recordsets ungültig.Wenn Sie Verschiebung mit dem nRows-Parameter aufrufen, der auf 0 festgelegt wird, und den CRecordset::skipDeletedRecords Optionssatz, Move erläutert.Beachten Sie, dass CRecordset::skipDeletedRecordszur Treiberverpackung ähnelt, was bedeutet, dass gelöschte Zeilen aus dem Recordset entfernt werden.Wenn der Treiber Datensätze packt, es dann überspringt nur die Datensätze, die Sie löschen; es überspringt nicht die Datensätze, die von anderen Benutzern gelöscht werden, während das Recordset geöffnet ist.CRecordset::skipDeletedRecords überspringt die Zeilen, die von anderen Benutzern gelöscht werden.
Verwendungslesezeichen CRecordset::useBookmarks Mai auf dem Recordset, wenn Sie unterstützt werden.Langsamer Datenabruf der Lesezeichen jedoch verbessern die Leistung für Datennavigation.Ungültig in Vorwärts-Recordsets.Weitere Informationen finden Sie im Artikel Recordset: Lesezeichen und absolute Positionen (ODBC).
CRecordset::noDirtyFieldCheck stellen automatische geänderte Feldüberprüfung ab (doppelte Pufferung).Dies verbessert die Leistung; müssen Sie jedoch manuell Felder kennzeichnen, wie geändert, indem Sie die SetFieldDirty und SetFieldNull-Memberfunktionen aufrufen. Beachten Sie, dass doppelte Pufferung in der Klasse CRecordset auf doppelte Pufferung in der Klasse CDaoRecordset ähnelt.In CRecordset, können Sie doppelte Pufferung für einzelne Felder nicht aktivieren; Sie können entweder sie für alle Felder oder deaktivieren diese für alle Felder.Beachten Sie, dass Sie die Option CRecordset::useMultiRowFetch angeben, wird CRecordset::noDirtyFieldCheck automatisch aktiviert; können jedoch SetFieldDirty und SetFieldNull nicht in Recordsets verwendet werden, die das gesammelte Abrufen von Zeilen implementiert ist.
CRecordset::executeDirect verwenden keine geschriebene SQL-Anweisung.Um die Leistung geben Sie diese Option, wenn die Requery-Memberfunktion nie aufgerufen wird.
CRecordset::useExtendedFetch implementieren SQLExtendedFetch anstelle SQLFetch.Dies ist für die Implementierung des das gesammelte Abrufen von Zeilen in Vorwärts-Recordsets vorgesehen.Wenn Sie die Option CRecordset::useMultiRowFetch auf einem Vorwärts-Recordset angeben, wird CRecordset::useExtendedFetch automatisch aktiviert.
CRecordset::userAllocMultiRowBuffers der Benutzer ordnet Speicherpuffer für die Daten.Verwenden Sie diese Option in Verbindung mit CRecordset::useMultiRowFetch, wenn Sie Ihren eigenen Speicher zuordnen möchten; andernfalls ordnet das Framework automatisch den notwendigen Speicher zu.Weitere Informationen finden Sie im Artikel Recordset: Datensätzen in einer Sammeloperation (ODBC).Beachten Sie, dass CRecordset::userAllocMultiRowBuffers angibt, ohne CRecordset::useMultiRowFetch anzugeben, führt zu einem Assertionsfehler.
Rückgabewert
Ungleich 0 (null), wenn das Objekt erfolgreich CRecordset geöffnet war; 0 gibt 0 zurück wenn andernfalls CDatabase::Open (wenn Sie aufgerufen werden).
Hinweise
Sie müssen diese Memberfunktion aufrufen, um die Abfrage auszuführen, die durch das Recordset definiert ist.Bevor Sie Öffnen aufrufen, müssen Sie das Recordset-Objekt erstellen.
Die Verbindung dieses Recordsets zur Datenquelle hängt davon ab, wie Sie das Recordset erstellen, bevor Sie Öffnen aufrufen.Wenn Sie ein CDatabase-Objekt an Recordsetkonstruktor übergeben, der nicht an die Datenquelle verbunden wurde, verwendet GetDefaultConnect dieser Memberfunktion zu versuchen, ein Datenbankobjekt zu öffnen.Wenn Sie NULL zum Recordsetkonstruktor übergeben, erstellt der Konstruktor CDatabase ein Objekt für Sie und Öffnen versucht, das Datenbankobjekt herzustellen.Ausführliche Informationen zum Schließen des Recordsets und der Verbindung unter diesen Umständen verschiedene, finden Sie unter Abschluss.
Hinweis |
|---|
Zugriff auf eine Datenquelle von einem CRecordset-Objekt wird immer freigegeben.Im Gegensatz zur CDaoRecordset-Klasse können Sie eine CRecordset-Objekt nicht verwenden, um eine Datenquelle mit exklusivem Zugriff zu öffnen. |
Wenn Sie Öffnen aufrufen, wählt eine Abfrage, normalerweise eine Anweisung SQL SELECT, Datensätze auf Grundlage der Kriterien aus, die in der folgenden Tabelle.
Wert des Parameters lpszSQL |
Die ausgewählten Datensätze werden bestimmt durch |
Beispiel |
|---|---|---|
NULL |
Die zurückgegebene Zeichenfolge durch GetDefaultSQL. |
|
SQL-Tabellenname |
Alle Spalten der TabelleListe in DoFieldExchange oder in DoBulkFieldExchange. |
"Customer" |
Vordefinierter Name der Abfrage (gespeicherte Prozedur) |
Die Spalten die Abfrage wird definiert, um zurückzukehren. |
"{call OverDueAccts}" |
SELECT SpalteListe FROM TabelleListe |
Die angegebenen Spalten aus den angegebenen Tabellen. |
"SELECT CustId, CustName FROM Customer" |
Vorsicht |
|---|
Achten Sie darauf, dass Sie keine zusätzlichen Leerzeichen in der SQL-Zeichenfolge einfügen.Wenn Sie beispielsweise Leerzeichen zwischen den geschweiften Klammern und dem CALL-Schlüsselwort einfügen, interpretiert MFC die SQL-Zeichenfolge als Tabellenname fehl und enthält sie in eine SELECT-Anweisung, die eine Ausnahme ergibt, die ausgelöst wird.Auch wenn die vordefinierte Abfrage einen Ausgabeparameter verwendet, fügen Sie keinen Leerraum zwischen den geschweiften Klammern und "?" ein Symbol.Schließlich dürfen Sie Leerzeichen nicht vor der geschweiften Klammer in einer CALL-Anweisung oder vor dem SELECT-Schlüsselwort in einer SELECT-Anweisung einfügen. |
Die übliche Vorgehensweise ist, NULL zu Öffnen zu übergeben; in diesem Fall Öffnen Aufrufe GetDefaultSQL.Wenn Sie eine abgeleitete Klasse CRecordset verwenden, gibt GetDefualtSQL den Tabellennamen, den Sie in Klassen-Assistent angegeben haben.Sie können andere Informationen im lpszSQL-Parameter stattdessen angeben.
Was Sie auch übergeben wird, wird Öffnen Konstrukte eine abschließende SQL-Anweisung für die Abfrage (die Zeichenfolge möglicherweise ist SQL WHERE und ORDER BY-Klauseln, die zu lpszSQL angefügt werden, verbinden Sie haben) auf und dann die Abfrage aus.Sie können die erstellte Zeichenfolge überprüfen, indem Sie GetSQL aufrufen, nachdem Sie Öffnen aufgerufen haben.Weitere Informationen darüber, wie das Recordset eine SQL-Anweisung erstellt und Datensätze auswählt, finden Sie im Artikel Recordset: Datensatzauswahl durch Recordsets (ODBC).
Die Felddatenmember der Recordset-Klasse werden den Spalten der ausgewählten Daten gebunden.Wenn eine werden Datensätze, der erste Datensatz wird der aktuelle Datensatz zurückgegeben.
Wenn Sie Optionen für das Recordset, wie einen Filter oder eine Sortierung festlegen möchten, geben Sie diese an, nachdem Sie das Recordset-Objekt konstruiert haben, aber bevor Sie Öffnen aufrufen.Wenn Sie die Datensätze im Recordset aktualisieren möchten, nachdem das Recordset bereits geöffnet ist, rufen Sie Fragen Sie erneut ab auf.
Weitere Informationen und Beispiele, finden Sie in Artikel Recordsets (ODBC), Recordset: Datensatzauswahl durch Recordsets (ODBC) und Recordset: Erstellen und Schließen von Recordsets (ODBC).
Ausnahmen
Diese Methode kann Ausnahmen des Typs CDBException* und CMemoryException* auslösen.
Beispiel
Die verschiedenen Formen der folgenden Codebeispielshow Öffnen des Aufrufs.
// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived
// objects
// Open rs using the default SQL statement, implement bookmarks, and turn
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks |
CRecordset::noDirtyFieldCheck);
// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));
// Accept all defaults
rsDefault.Open();
Anforderungen
Header: afxdb.h