Recordset: Architektur (ODBC)
Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.
In diesem Thema sind die Datenelemente (Datenmember) beschrieben, die zum Aufbau eines Recordset-Objekts gehören:
Hinweis
Dieses Thema bezieht sich auf von CRecordset
abgeleitete Objekte, in denen das gesammelte Abrufen von Zeilen nicht implementiert wurde. Wird gesammeltes Abrufen (Massenabrufen) von Zeilen implementiert, ist die Architektur ähnlich. Informationen zu den Unterschieden finden Sie unter Recordset: Abrufen von Datensätzen in Massen (ODBC).
Beispielklasse
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.
Wenn Sie den MFC-ODBC-Consumer-Assistenten aus dem Klasse hinzufügen-Assistenten verwenden, um eine aus CRecordset
abgeleitete Recordset-Klasse zu deklarieren, hat die resultierende Klasse die grundsätzliche Struktur, die für die folgende einfache Klasse dargestellt ist:
class CCourse : public CRecordset
{
public:
CCourse(CDatabase* pDatabase = NULL);
...
CString m_strCourseID;
CString m_strCourseTitle;
CString m_strIDParam;
};
An den Anfang der Klasse schreibt der Assistent eine Reihe von Felddatenmembern. Wenn Sie die Klasse erstellen, müssen Sie mindestens ein Felddatenmember angeben. Ist die Klasse parametrisiert, wie dies für die Beispielklasse der Fall ist (mit dem Datenmember m_strIDParam
), müssen Sie manuell Parameterdatenmember hinzufügen. Der Assistent unterstützt das Hinzufügen von Parametern zu einer Klasse nicht.
Elemente der Felddaten
Die wichtigsten Member des Recordset-Klasse sind die Felddatenmember. Für jede Spalte, die Sie in der Datenquelle auswählen, enthält die Klasse ein Datenmember mit dem entsprechenden Datentyp für diese Spalte. Die am Anfang dieses Themas gezeigte Beispielklasse hat beispielsweise zwei Felddatenmember namens m_strCourseID
und m_strCourseTitle
, die beide den Typ CString
haben.
Wenn das Recordset eine Menge von Datensätzen auswählt, bindet das Framework die Spalten des aktuellen Datensatzes (nach dem Open
-Aufruf ist der erste Datensatz aktuell) automatisch an die Felddatenmember des Objekts. Das heißt, das Framework verwendet den entsprechenden Felddatenmember als Puffer, in dem der Inhalt einer Datensatzspalte gespeichert wird.
Wenn der Benutzer zu einem neuen Datensatz scrollt, verwendet das Framework die Felddatenmember, um den aktuellen Datensatz darzustellen. Das Framework aktualisiert die Felddatenmember, wobei die Werte des vorherigen Datensatzes ersetzt werden. Die Felddatenmember werden auch zum Aktualisieren des aktuellen Datensatzes und zum Hinzufügen neuer Datensätze verwendet. Als einen Schritt des Aktualisierens eines Datensatzes geben Sie die Aktualisierungswerte an, indem Sie den entsprechenden Felddatenmembern direkt Werte zuweisen.
Parameter Data-Elemente
Ist die Klasse parametrisiert, hat sie mindestens ein Parameterdatenmember. Eine parametrisierte Klasse ermöglicht es Ihnen, für eine Recordset-Abfrage Daten zu verwenden, die zur Laufzeit abgerufen oder berechnet werden.
Üblicherweise hilft der Parameter, die Auswahl einzugrenzen, wie im folgenden Beispiel gezeigt. Ausgehend von der Beispielklasse am Anfang dieses Themas könnte das Recordset-Objekt die folgende SQL-Anweisung ausführen:
SELECT CourseID, CourseTitle FROM Course WHERE CourseID = ?
Das „?“ ist ein Platzhalter für einen Parameterwert, den Sie zur Laufzeit angeben. Wenn Sie beim Erstellen des Recordsets dessen m_strIDParam
-Datenmember auf MATH101 festlegen, sieht die resultierende SQL-Anweisung für das Recordset wie folgt aus:
SELECT CourseID, CourseTitle FROM Course WHERE CourseID = MATH101
Durch Definieren von Parameterdatenmembern informieren Sie das Framework über Parameter in der SQL-Zeichenfolge. Das Framework bindet den Parameter, wodurch ODBC mitgeteilt wird, wo es die Werte abrufen soll, durch die der Platzhalter ersetzt wird. In diesem Beispiel enthält das resultierende Recordset nur einen Datensatz aus der Tabelle „Course“ mit einer „CourseID“-Spalte, die den Wert MATH101 hat. Alle angegebenen Spalten dieses Datensatzes sind ausgewählt. Sie können so viele Parameter (und Platzhalter) angeben, wie Sie benötigen.
Hinweis
MFC selbst führt keine Aktionen mit den Parametern aus, insbesondere nimmt es keine Textersetzung vor. Stattdessen teilt MFC ODBC mit, wo der Parameter abgerufen werden soll. ODBC ruft die Daten ab und führt die notwendige Parametrisierung durch.
Hinweis
Die Reihenfolge der Parameter ist wichtig. Weitere Informationen zu Parametern finden Sie unter Recordset: Parameterizing a Recordset (ODBC).
Verwenden von m_nFields und m_nParams
Wenn ein Assistent einen Konstruktor für Ihre Klasse schreibt, initialisiert er auch den m_nFields-Datenmember, der die Anzahl von Felddatenmembern in der Klasse angibt. Wenn Sie Parameter zu Ihrer Klasse hinzufügen, müssen Sie auch eine Initialisierung für den m_nParams-Datenmember hinzufügen, der die Anzahl von Parameterdatenmembern angibt. Das Framework verwendet diese Werte, um mit den Datenelementen zu arbeiten.
Weitere Informationen und Beispiele finden Sie unter Record Field Exchange: Using RFX.
Siehe auch
Recordset (ODBC)
Recordset: Deklarieren einer Klasse für eine Tabelle (ODBC)
Datensatzfeldaustausch (RFX)