Ungleich NULL, wenn das CRecordset -Objekt erfolgreich geöffnet wurde; Wenn CDatabase:: Open aufrufen (wenn genannt) gibt 0 zurück, andernfalls 0.
Parameter
nOpenType
Übernehmen Sie den Standardwert, AFX_DB_USE_DEFAULT_TYPE, oder verwenden Sie eine der folgenden Werte aus der EnumerationOpenType:
Sein&Nbsp; Ein Recordset mit Bi-direktionale scrollen. Die Mitgliedschaft und Reihenfolge der Datensätze werden festgelegt, wenn das Recordset geöffnet ist, aber Änderungen durch andere Benutzer auf die Datenwerte sind nach eine Fetch-Operation sichtbar. Dynasets sind auch bekannt als Keyset-gesteuerte recordsets.
CRecordset::snapshot&Nbsp; Eine statische Recordset mit Bi-direktionale scrollen. Die Mitgliedschaft und Reihenfolge der Datensätze werden festgelegt, wenn das Recordset geöffnet ist; die Datenwerte werden festgelegt, wenn die Datensätze abgerufen werden. Von anderen Benutzern vorgenommene Änderungen sind nicht sichtbar, bis das Recordset geschlossen und anschließend erneut geöffnet.
CRecordset::dynamic&Nbsp; Ein Recordset mit Bi-direktionale scrollen. Änderungen anderer Benutzer auf die Mitgliedschaft, Reihenfolge und die Datenwerte sind nach eine Fetch-Operation sichtbar. Beachten Sie, dass viele ODBC-Treiber nicht mit dieser Art von Recordset unterstützen.
CRecordset::forwardOnly&Nbsp; Ein nur-Lese-Recordset mit nur vorwärts scrollen.
Für CRecordsetist der Standardwert CRecordset::snapshot. Der Standardwert Mechanismus erlaubt die Visual C++-Assistenten zur Interaktion mit CRecordset ODBC und DAO CDaoRecordset, die unterschiedliche Standardwerte haben.
Weitere Informationen über diese Recordset-Typen finden Sie im Artikel Recordset ((ODBC)) im Visual C++ Programmer's Guide. Weitere Informationen finden Sie im Artikel "Using Block und scrollfähige Cursor" in der ODBC SDK Programmer's Reference.
Vorsicht&Nbsp; Wenn der angeforderte Typ nicht unterstützt wird, löst das Framework eine Ausnahme.
lpszSQL
Einen Zeichenfolgenzeiger mit einer der folgenden:
Ein NULL -Zeiger.
Der Name einer Tabelle.
Eine SQL SELECT Anweisung (optional mit einer SQL- wo oder ORDER BY -Klausel).
Eine CALL -Anweisung angeben des Namens einer vordefinierten Abfrage (gespeicherte Prozedur). Achten Sie darauf, dass Sie keine Leerzeichen zwischen der geschweiften Klammer und dem CALL -Schlüsselwort einfügen.
Weitere Informationen zu dieser Zeichenfolge finden Sie in der Tabelle und die Diskussion über die Klassen-Assistent Rolle unter Bemerkungen.
Hinweis&Nbsp; Die Reihenfolge der Spalten in einem Resultset muss mit die Reihenfolge der RFX übereinstimmen oder Bulk-RFX-Funktionsaufrufe in der DoFieldExchange-Memberfunktion oder der DoBulkFieldExchange -Funktion außer Kraft setzen.
dwOptions
Eine Bitmaske, die eine Kombination aus der unten aufgeführten Werte angeben kann. Einige von diesen schließen sich gegenseitig aus. Der Standardwert ist none.
CRecordset::none&Nbsp; Keine Optionen festgelegt. Der Wert dieses Parameters ist gegenseitig mit allen anderen Werten. In der Standardeinstellung das Recordset aktualisiert werden kann, Bearbeiten oder Löschen und ermöglicht mit AddNewneue Datensätze anzufügen. Aktualisierbarkeit hängt für die Datenquelle sowie die nOpenType -Option, die Sie angeben. Optimierung für Massenkopieren Hinzufügungen ist nicht verfügbar. Gesammelte werden nicht implementiert. Während der Recordsetnavigation werden nicht gelöschte Datensätze übersprungen werden. Lesezeichen sind nicht verfügbar. Automatische dirty-Feld Überprüfung wird durchgeführt.
CRecordset::appendOnly&Nbsp; Lassen Sie nicht Bearbeiten oder Löschen , für das Recordset. AddNew nur zulassen. Diese Option ist gegenseitig mit CRecordset::readOnly.
CRecordset::readOnly&Nbsp; Öffnen Sie das Recordset als schreibgeschützt. Diese Option ist gegenseitig mit CRecordset::appendOnly.
CRecordset::optimizeBulkAdd&Nbsp; Verwenden Sie eine vorbereitete SQLAnweisung, um hinzufügen viele Datensätze gleichzeitig zu optimieren. Gilt nur, wenn Sie nicht die ODBC-API-Funktion SQLSetPos verwenden, um das Recordset zu aktualisieren. Das erste Update bestimmt, welche Felder sind schmutzig. Diese Option ist gegenseitig mit übergeben.
&Nbsp übergeben; Implementieren Sie gesammelte mehrere Zeilen in eine einzelne Abrufoperation abgerufen werden können. Dies ist eine erweiterte Funktion, die entworfen, um Leistung zu verbessern; Massenkopieren Record Field Exchange wird jedoch nicht von Klassen-Assistenten unterstützt. Diese Option ist mit CRecordset::optimizeBulkAddgegenseitig. Beachten Sie, dass wenn Sie übergebenangeben, dann die Option CRecordset::noDirtyFieldCheck automatisch eingeschaltet wird (Doppelpufferung wird nicht verfügbar sein); in vorwärts-Recordsets wird die Option CRecordset::useExtendedFetch automatisch aktiviert werden. Weitere Informationen über gesammelte finden Sie im Artikel Recordset: Abrufen von Datensätzen in einer Sammeloperation (ODBC) im Visual C++ Programmer's Guide.
CRecordset::skipDeletedRecords&Nbsp; Überspringen Sie alle gelöschten Datensätze beim Navigieren durch das Recordset. Dies wird langsam in bestimmten relativen Abrufe. Diese Option gilt nicht für vorwärts-Recordsets. Beachten Sie, dass CRecordset::skipDeletedRecords ähnlich wie Treiber, Verpackung, was bedeutet, dass gelöschte Zeilen aus dem Recordset gelöscht werden. Jedoch, wenn Ihr Fahrer Datensätze packt, wird dann nur die Datensätze überspringen, die Sie löschen; Es überspringt keine Datensätze, die von anderen Benutzern gelöscht werden, während das Recordset geöffnet ist. CRecordset::skipDeletedRecords werden von anderen Benutzern gelöschte Zeilen überspringen.
CRecordset::useBookmarks&Nbsp; Können Lesezeichen für das Recordset, wenn unterstützt. Lesezeichen Datenabruf langsam aber Verbesserung der Performance für Daten-Navigation. Für vorwärts-Recordsets nicht gültig. Weitere Informationen finden Sie im Artikel Recordset: Lesezeichen und Absolute Positionen (ODBC) im Visual C++ Programmer's Guide.
CRecordset::noDirtyFieldCheck&Nbsp; Deaktivieren Sie die automatische Überprüfung (Doppelpufferung) dirty-Feld. Dies verbessert die Leistung; Allerdings müssen Sie manuell Felder als schmutzig kennzeichnen, durch die SetFieldDirty und SetFieldNull aufrufen.Beachten Sie, dass doppelte Pufferung in Klasse CRecordset doppelte Pufferung in Klasse CDaoRecordsetähnlich ist. Jedoch in CRecordset, können nicht Sie aktivieren doppelte Pufferung auf einzelne Felder; Sie für alle Felder aktivieren oder deaktivieren sie für alle Felder. Weitere Informationen über die doppelte Pufferung finden Sie im Artikel DAO DAO-Datensatzfeldaustausch: Double Buffering Datensätze im Visual C++ Programmer's Guide. Beachten Sie, dass wenn Sie die Option übergeben, dann CRecordset::noDirtyFieldCheck automatisch eingeschaltet wird; Allerdings kann nicht SetFieldDirty und SetFieldNull auf Recordsets verwendet werden, die gesammelte implementieren.
CRecordset::executeDirect&Nbsp; Verwenden Sie keine vorbereitete SQLAnweisung. Geben Sie für verbesserte Leistung diese Option, wenn die Requery -Memberfunktion wird nie aufgerufen werden.
CRecordset::useExtendedFetch&Nbsp; Implementiert SQLExtendedFetch statt SQLFetch. Dies soll für die Implementierung gesammelte in vorwärts-Recordsets. Wenn Sie die Option übergeben auf ein vorwärts Recordset angeben, wird dann CRecordset::useExtendedFetch automatisch aktiviert.
CRecordset:: userAllocMultiRowBuffers&Nbsp; Der Benutzer wird für die Daten Speicherpuffer reservieren. Verwenden Sie diese Option in Verbindung mit übergeben , wenn Sie Ihren eigenen Speicher zuweisen möchten; Andernfalls wird der Rahmen automatisch den erforderlichen Speicher zuweisen. Weitere Informationen finden Sie im Artikel Recordset: Abrufen von Datensätzen in einer Sammeloperation (ODBC) im Visual C++ Programmer's Guide. Beachten Sie, dass die CRecordset:: userAllocMultiRowBuffers angeben, ohne Angabe übergeben eine Assertionsmeldung führt.
Bemerkungen
Sie müssen diese zum Ausführen der Abfrage definiert durch das Recordset-Memberfunktion aufrufen. Bevor Sie aufrufen Öffnen, müssen Sie das Recordset-Objekt erstellen.
Dieses Recordset Verbindung zu der Datenquelle hängt davon ab, wie Sie das Recordset erstellen, bevor Sie aufrufen Öffnen. Wenn Sie ein CDatabase -Objekt an dem Recordset-Konstruktor, die nicht mit der Datenquelle verbunden wurde übergeben, verwendet dieser Member-Funktion versucht, öffnen Sie das Datenbankobjekt GetDefaultConnect . Wenn Sie NULL an den Recordset-Konstruktor übergeben wird, der Konstruktor erstellt ein CDatabase -Objekt für Sie, und Öffnen versucht das Database-Objekt herzustellen. Details über das Schließen des Recordsets und die Verbindung unter diesen unterschiedlichen Umständen finden Sie unter Schließen.
Hinweis&Nbsp; Zugriff auf eine Datenquelle über ein CRecordset -Objekt wird immer geteilt. Im Gegensatz zu der CDaoRecordset -Klasse können ein CRecordset -Objekt Sie eine Datenquelle mit exklusivem Zugriff öffnen.
Beim Aufruf von Openwählt eine Abfrage, in der Regel eine SQL Wählen Sie Anweisung Datensätze basierend auf Kriterien in der folgenden Tabelle gezeigt.
Der Wert der LpszSQL-parameter
Datensätze ausgewählt werden durch bestimmt.
Beispiel
NULL
Die von GetDefaultSQL zurückgegebene Zeichenfolge.
Name der SQL-Tabelle
Alle Spalten der Tabelle-Liste in der DoFieldExchange-Memberfunktion oder der DoBulkFieldExchange.
"Kunde"
Vordefinierte Abfragename (gespeicherte Prozedur)
Die Spalten, die die Abfrage definiert ist, um zurückzugeben.
"{call OverDueAccts}"
Wählen Sie Spaltenliste FROM Tabelle-Liste
Die angegebenen Spalten aus den angegebenen Tabellen.
"Wählen SIE CustId, CustName Kunden"
! Warnung&Nbsp; Achten Sie darauf, dass Sie nicht in der SQL-Zeichenfolge zusätzliche Leerzeichen einfügen. Beispielsweise wenn Sie Leerzeichen zwischen der geschweiften Klammer und dem CALL -Schlüsselwort einfügen, wird MFC fälschlicherweise die SQL-Zeichenfolge als Tabellenname und integrieren es in einer SELECT -Anweisung, die eine Ausnahme führen wird. Ebenso, wenn die vordefinierte Abfrage einen Output-Parameter verwendet, fügen Sie keine Leerzeichen zwischen die geschweiften Klammern und die '?' Symbol. Schließlich müssen Sie keine Leerzeichen vor der geschweiften Klammer in einer CALL -Anweisung oder vor dem Wählen Sie Schlüsselwort in einem SELECT -Statement einfügen.
Die übliche Vorgehensweise ist NULL an Openübergeben; in diesem Fall ruft OpenGetDefaultSQL. Wenn Sie eine von CRecordset abgeleitete Klasse verwenden, gibt GetDefualtSQL die Tabelle Namen, die Sie im Klassen-Assistenten angegeben. Sie können stattdessen andere Informationen im LpszSQL -Parameter angeben.
Was auch immer Sie übergeben, offene konstruiert eine letzte SQL-Zeichenfolge für die Abfrage (die Zeichenfolge kann SQL wo und ORDER BY -Klauseln an die LpszSQL -Zeichenfolge, die Sie übergeben angehängt haben) und dann führt die Abfrage. Sie können die erstellte Zeichenfolge durch Aufrufen von GetSQL nach dem Aufruf von Openuntersuchen. Weitere Informationen darüber, wie das Recordset generiert eine SQL-Anweisung wählt Datensätze aus, finden Sie im Artikel Recordset: Datensätze durch Recordsets (ODBC) im Visual C++ Programmer's Guide.
Die Felddatenmember der Recordset-Klasse sind die Spalten der ausgewählten Daten gebunden. Wenn keine Datensätze zurückgegeben werden, wird der erste Datensatz der aktuelle Datensatz.
Wenn Sie, legen Sie Optionen für Recordsets, z. B. Filtern oder sortieren möchten, geben Sie diese, nachdem Sie das Recordset-Objekt erstellen, aber vor dem Aufruf von Open. Möchten Sie die Datensätze im Recordset zu aktualisieren, nachdem das Recordset bereits geöffnet ist, rufen Sie Requery.
Die folgenden Codebeispiele zeigen verschiedene Formen der offenen Aufforderung.
/ / Rs ist ein CRecordset oder
/ / CRecordset-abgeleitete Objekt
/ / Offene Rs mit die Standard-SQL-Anweisung
/ / Lesezeichen zu implementieren, und schalten Sie
/ / Überprüfung der automatische dirty-Feld
Rs.Öffnen (CRecordset::snapshot, &NULL,
Nbsp; CRecordset::useBookmarks |
CRecordset::noDirtyFieldCheck);
/ / Eine vollständige SELECT-Anweisung übergeben
/ / und als ein Dynaset geöffnet
Rs.Öffnen Sie (Open,
_T ("wählen Sie L_Name Kunden"));
/ / Akzeptieren Sie alle Standardeinstellungen
Rs.(Offen)