Recordset: Architektur (ODBC)
Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.
Dieses Thema beschreibt die Datenmember, aus denen sich die Architektur eines Recordset-Objekts zusammensetzt:
Felddatenmember
Parameterdatenmember
m_nFields-Datenmember und m_nParams-Datenmember
Hinweis |
---|
Dieses Thema bezieht sich auf von CRecordset abgeleitete Objekte, in denen das gesammelte Abrufen von Zeilen nicht implementiert wurde.Falls das gesammelte Abrufen von Zeilen implementiert ist, ist die Architektur ähnlich.Unter Recordset: Abrufen von Datensätzen in einer Sammeloperation (ODBC) werden die Unterschiede erläutert. |
Beispielklasse
Wenn Sie mit dem MFC-ODBC-Consumer-Assistenten unter Klasse hinzufügen eine von CRecordset abgeleitete Recordset-Klasse deklarieren, verfügt die resultierende Klasse über die allgemeine Struktur, die in der folgenden einfachen Klasse dargestellt wird:
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 einen Satz von Felddatenmembern.Wenn Sie die Klasse erstellen, müssen Sie ein oder mehrere Felddatenmember angeben.Falls die Klasse parametrisiert ist, wie dies bei der Beispielklasse der Fall ist (mit dem Datenmember m_strIDParam), müssen Sie Parameterdatenmember manuell hinzufügen.Das Hinzufügen von Parametern zu einer Klasse wird nicht vom Assistenten unterstützt.
Felddatenmember
Die wichtigsten Member der Recordset-Klasse sind die Felddatenmember.Für jede Spalte, die Sie in der Datenquelle auswählen, enthält die Klasse einen Datenmember des passenden Datentyps für diese Spalte.Beispielsweise enthält die weiter oben gezeigte Beispielklasse zwei Felddatenmember vom Typ CString mit den Namen m_strCourseID und m_strCourseTitle.
Wenn das Recordset eine Gruppe von Datensätzen auswählt, werden die Spalten des aktuellen Datensatzes (nach dem Aufruf von Open ist der erste Datensatz der aktuelle Datensatz) automatisch vom Framework an die Felddatenmember des Objekts gebunden.Das Framework setzt den passenden Felddatenmember als Puffer ein, in dem es den Inhalt einer Datensatzspalte speichert.
Beim Scrollen zu einem neuen Datensatz verwendet das Framework die Felddatenmember, um den aktuellen Datensatz zu repräsentieren.Das Framework aktualisiert die Felddatenmember, indem es die Werte des vorherigen Datensatzes ersetzt.Die Felddatenmember werden auch für das Aktualisieren des aktuellen Datensatzes und für das Hinzufügen neuer Datensätze verwendet.Als Teil des Aktualisierungsprozesses für einen Datensatz geben Sie die aktualisierten Werte an, indem Sie die Werte direkt den entsprechenden Felddatenmembern zuweisen.
Parameterdatenmember
Eine parametrisierte Klasse verfügt über einen oder mehrere Parameterdatenmember.Mit einer parametrisierten Klasse können Sie eine Recordset-Abfrage auf Informationen basieren, die während der Laufzeit abgerufen oder berechnet werden.
Üblicherweise hilft der Parameter dabei, die Auswahl einzuschränken, wie in dem folgenden Beispiel.Ausgehend von der Beispielklasse zu Beginn des Themas könnte das Recordset-Objekt die folgende SQL-Anweisung ausführen:
SELECT CourseID, CourseTitle FROM Course WHERE CourseID = ?
Das Fragezeichen "?" ist ein Platzhalter für einen Parameterwert, den Sie zur Laufzeit zur Verfügung stellen.Wenn Sie das Recordset erstellen und für seinen m_strIDParam-Datenmember den Wert MATH101 festlegen, sieht die resultierende SQL-Anweisung für das Recordset wie folgt aus:
SELECT CourseID, CourseTitle FROM Course WHERE CourseID = MATH101
Durch das Definieren von Parameterdatenmembern informieren Sie das Framework über Parameter innerhalb der SQL-Zeichenfolge.Das Framework bindet den Parameter, der ODBC mitteilt, wo sich die an Stelle des Platzhalters einzusetzenden Werte befinden.In dem Beispiel enthält das resultierende Recordset nur einen Datensatz der Vorlesungstabelle, bei dem die Spalte CourseID den Wert MATH101 aufweist.Alle angegebenen Spalten dieses Datensatzes sind ausgewählt.Sie können so viele Parameter (und Platzhalter) angeben, wie Sie benötigen.
Hinweis |
---|
MFC selbst verwendet die Parameter nicht. Insbesondere führt sie damit keine Ersetzung von Text durch.Vielmehr teilt MFC ODBC mit, wo die Parameterdaten zu finden sind. ODBC ruft die Daten ab und führt die notwendige Parametrisierung aus. |
Hinweis |
---|
Die Reihenfolge der Parameter ist wichtig.Weitere Informationen zu diesem Thema und Parametern finden Sie unter Recordset: Parametrisieren eines Recordsets (ODBC). |
Verwenden von m_nFields und m_nParams
Wenn ein Assistent einen Konstruktor für die Klasse schreibt, wird auch der Datenmember m_nFields initialisiert, der die Anzahl der Felddatenmember der Klasse angibt.Wenn Sie der Klasse Parameter hinzufügen, müssen Sie auch eine Initialisierung für den m_nParams-Datenmember hinzufügen, in dem die Anzahl der Parameterdatenmember festgelegt wird.Das Framework verwendet diese Werte für die Arbeit mit den Datenmembern.
Weitere Informationen und Beispiele finden Sie unter Datensatzfeldaustausch: Verwenden von RFX.