Recordset: Datensatzauswahl durch Recordsets (ODBC)
Hinweis
Der MFC-ODBC-Consumer-Assistent ist in Visual Studio 2019 und höher nicht verfügbar. Sie können einen Consumer weiterhin manuell erstellen.
Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.
In diesem Thema wird Folgendes erläutert:
Für Recordsets werden Datensätze über einen ODBC-Treiber in einer Datenquelle ausgewählt, indem SQL-Anweisungen an den Treiber gesendet werden. Die gesendeten SQL-Anweisungen hängen davon ab, wie Sie Ihre Recordset-Klasse konzipiert haben und öffnen.
Ihre Optionen beim Auswählen von Datensätzen
In der folgenden Tabelle sind die Optionen aufgeführt, die Sie für das Auswählen von Datensätzen haben.
Wie und wann Sie ein Recordset beeinflussen können
Wenn Sie | Sie können |
---|---|
Sie können Ihre Recordset-Klasse mit dem Klasse hinzufügen-Assistenten deklarieren. | Sie können die Tabelle angeben, in der ausgewählt werden soll. Sie können angeben, welche Spalten einbezogen werden sollen. Weitere Informationen finden Sie unter Hinzufügen eines MFC-ODBC-Consumers. |
Die Implementierung Ihrer Recordset-Klasse abschließen | Memberkunktionen, z. B. OnSetOptions (erweitert), überschreiben, um anwendungsspezifische Optionen festzulegen oder Standardwerte zu ändern. Geben Sie Parameterdatenmember an, wenn Sie ein parametrisiertes Recordset wünschen. |
Ein Recordset-Objekt erstellen (vor dem Aufruf von Open ) |
Sie können eine Suchbedingung (möglicherweise kombiniert) zur Verwendung in einer WHERE-Klausel angeben, in der die Datensätze gefiltert werden. Siehe Recordset: Filtern von Datensätzen (ODBC). Sie können eine Sortierreihenfolge angeben, die in einer ORDER BY-Klausel verwendet wird, in der die Datensätze sortiert werden. Siehe Recordset: Sortieren von Datensätzen (ODBC). Sie können Parameterwerte für alle Parameter angeben, die Sie der Klasse hinzugefügt haben. Siehe Recordset: Parametrisieren eines Recordset (ODBC)-Objekts. |
|Die Abfrage des Recordsets durch Aufrufen von Open
ausführen| Sie können eine benutzerdefinierte SQL-Zeichenfolge angeben, um die Standard-SQL-Zeichenfolge zu ersetzen, die der Assistent eingerichtet hat. Siehe CRecordset::Open in the Class Library Reference and SQL: Customizing Your Recordset's SQL Statement (ODBC).|
|Requery
aufrufen, um das Recordset mit den neuesten Werten in der Datenquelle erneut abzufragen | Sie können neue Parameter angeben oder filtern oder sortieren. Siehe Recordset: Erneutes Abfragen eines Recordsets (ODBC).|
So erstellt ein Recordset seine SQL-Anweisung
Wenn Sie die Open-Memberfunktion eines Recordset-Objekts aufrufen, erstellt Open
eine SQL-Anweisung mit einigen oder allen der folgenden Bestandteile:
Der lpszSQL-Parameter wird an
Open
übergeben. Ist er ungleich NULL, gibt dieser Parameter eine benutzerdefinierte SQL-Zeichenfolge oder einen Teil einer solchen Zeichenfolge an. Das Framework analysiert die Zeichenfolge. Ist die Zeichenfolge eine SELECT-SQL-Anweisung oder eine CALL-ODBC-Anweisung, verwendet das Framework die Zeichenfolge als SQL-Anweisung des Recordsets. Beginnt die Zeichenfolge nicht mit „SELECT“ oder „{CALL“, verwendet das Framework die bereitgestellten Bestandteile dazu, eine FROM-SQL-Klausel zu erstellen.Die Zeichenfolge, die von GetDefaultSQL zurückgegeben wird. Standardmäßig ist dies der Name der Tabelle, die Sie für das Recordset im Assistenten angegeben haben. Sie können aber ändern, was die Funktion zurückgibt. Das Framework ruft
GetDefaultSQL
auf; beginnt die Zeichenfolge nicht mit „SELECT“ oder „{CALL“, wird angenommen, dass sie ein Tabellenname ist, der dann verwendet wird, um eine SQL-Zeichenfolge zu erstellen.Die Felddatenmember des Recordset-Objekts, die an bestimmte Spalten der Tabelle gebunden werden müssen. Das Framework bindet Datensatzspalten an die Adressen dieser Member und verwendet diese als Puffer. Das Framework bestimmt die Zuordnung der Felddatenmember zu Tabellenspalten aus dem RFX- oder Massen-RFX-Funktionsaufruf in der DoFieldExchange- oder DoBulkFieldExchange-Memberfunktion des Recordsets.
Der Filter für das Recordset, sofern vorhanden, der im m_strFilter-Datenmember enthalten ist. Das Framework verwendet diese Zeichenfolge, um eine WHERE-SQL-Klausel zu erstellen.
Die Sortierreihenfolge für das Recordset, sofern vorhanden, die im m_strSort-Datenmember enthalten ist. Das Framework verwendet diese Zeichenfolge, um eine ORDER BY-SQL-Klausel zu erstellen.
Tipp
Möchten Sie die GROUP BY-SQL-Klausel (und möglicherweise die HAVING-Klausel) verwenden, fügen Sie die Klauseln am Ende Ihrer Filterzeichenfolge an.
Die Werte eines beliebigen Parameterdatenmembers, das Sie für die Klasse angeben. Sie legen Parameterwerte fest, unmittelbar bevor Sie
Open
oderRequery
aufrufen. Das Framework bindet die Parameterwerte an „?“-Platzhalter in der SQL-Zeichenfolge. Zur Kompilierzeit geben Sie die Zeichenfolge mit Platzhaltern an. Zur Laufzeit füllt das Framework die Details anhand der Parameterwerte aus, die Sie übergeben.
Open
erstellt eine SELECT-SQL-Anweisung aus diesen Bestandteilen. Ausführlichere Informationen darüber, wie das Framework die Bestandteile verwendet, finden Sie unter Anpassen der Auswahl.
Nachdem die Anweisung erstellt ist, sendet Open
die SQL-Anweisung an den ODBC-Treiber-Manager (und die ODBC-Cursorbibliothek, wenn sie sich im Speicher befindet), der sie an den ODBC-Treiber für das spezielle DBMS sendet. Der Treiber kommuniziert mit dem DBMS, um die Auswahl für die Datenquelle auszuführen, und ruft den ersten Datensatz ab. Das Framework lädt den Datensatz in die Felddatenmember des Recordset-Objekts.
Sie können eine Kombination dieser Techniken verwenden, um Tabellen zu öffnen und eine Abfrage zu erstellen, die auf einer Verknüpfung (Join) mehrerer Tabellen basiert. In einer weiteren Anpassung können Sie vordefinierte Abfragen (gespeicherte Prozeduren) aufrufen, die Tabellenspalten auswählen, die zur Entwurfszeit nicht bekannt waren, und diese Spalten an die Recordset-Felder binden, oder Sie können die meisten anderen Datenzugriffsaufgaben ausführen. Aufgaben, die Sie nicht durch Anpassen von Recordsets erledigen können, lassen sich weiterhin durch Aufrufen von ODBC-API-Funktionen oder direkt durch Ausführen von SQL-Anweisungen mit CDatabase::ExecuteSQL erledigen.
Anpassen der Auswahl
Neben der Bereitstellung eines Filters, einer Sortierreihenfolge oder von Parametern können Sie die Auswahl Ihres Recordsets mit den folgenden Aktionen anpassen:
Übergeben Sie eine benutzerdefinierte SQL-Zeichenfolge in lpszSQL, wenn Sie Open für das Recordset aufrufen. Alle Werte, die Sie in lpsqSQL übergeben, haben Vorrang vor den Werten, die von der GetDefaultSQL-Memberfunktion zurückgegeben werden.
Weitere Informationen finden Sie unter SQL: Anpassen der SQL-Anweisung (ODBC) Ihres Recordset-Objekts, die die Typen von SQL-Anweisungen (oder partielle Anweisungen) beschreibt, an
Open
die Sie übergeben können und an welche Funktionsweise das Framework mit ihnen führt.Hinweis
Wenn die benutzerdefinierte Zeichenfolge, die Sie übergeben, nicht mit „SELECT“ oder „{CALL“ beginnt, geht MFC davon aus, dass sie einen Tabellennamen enthält. Dies gilt auch für den nächsten aufgezählten Punkt.
Ändern Sie die Zeichenfolge, die der Assistent in die
GetDefaultSQL
-Memberfunktion Ihres Recordsets schreibt. Bearbeiten Sie den Code der Funktion, um deren Rückgabewerte zu ändern. Standardmäßig schreibt der Assistent eineGetDefaultSQL
-Funktion, die einen einzigen Tabellennamen zurückgibt.Sie können veranlassen, dass
GetDefaultSQL
jedes beliebige der Elemente zurückgibt, die Sie im lpszSQLParameter anOpen
übergeben können. Wenn Sie keine benutzerdefinierte SQL-Zeichenfolge in lpszSQL übergeben, verwendet das Framework die Zeichenfolge, dieGetDefaultSQL
zurückgibt. Als Mindestanforderung mussGetDefaultSQL
den Namen einer einzelnen Tabelle zurückgeben. Sie können für diese Funktion aber auch festlegen, dass sie mehrere Tabellennamen, eine vollständige SELECT-Anweisung, eine CALL-ODBC-Anweisung usw. zurückgibt. Eine Liste der Elemente, die Sie an lpszSQL übergeben können oderGetDefaultSQL
die rückgabe haben, finden Sie unter SQL: Customizing Your Recordset's SQL Statement (ODBC).Wenn Sie mehrere Tabellen verknüpfen, schreiben Sie
GetDefaultSQL
um, damit die Tabellenliste angepasst wird, die in der FROM-SQL-Klausel verwendet wird. Weitere Informationen finden Sie unter Recordset: Durchführen einer Verknüpfung (ODBC).For more information, see Recordset: Performing a Join (ODBC).Binden Sie weitere Felddatenmember manuell, vielleicht anhand von Informationen, die Sie zur Laufzeit über das Schema Ihrer Datenquelle erhalten. Fügen Sie Felddatenmember zur Recordset-Klasse, RFX- oder Bulk-RFX-Funktionsaafrufe für diese zur DoFieldExchange- oder DoBulkFieldExchange-Memberfunktion und Initialisierungen der Datenmember im Klassenkonstruktor hinzu. Weitere Informationen finden Sie unter Recordset: Dynamically Binding Data Columns (ODBC).
Überschreiben Sie Memberkunktionen, z. B.
OnSetOptions
, um anwendungsspezifische Optionen festzulegen oder Standardwerte zu überschreiben.
Wenn Sie für das Recordset eine komplexe SQL-Anweisung verwenden möchten, müssen Sie eine Kombination dieser Anpassungstechniken verwenden. Es könnte beispielsweise sein, dass Sie SQL-Klauseln und -Schlüsselwörter verwenden möchten, die nicht direkt von Recordsets unterstützt werden, oder dass Sie mehrere Tabellen verknüpfen.
Siehe auch
Recordset (ODBC)
Recordset: Wie Recordsets Datensätze aktualisieren (ODBC)
Grundlagen zu ODBC
SQL
Recordset: Sperren von Datensätzen (ODBC)