CRecordset

takeshii

Grünschnabel
Hi!
Ich möchte mit Visual C++ 6 in eine SDI - Anwendung mehrere Tabellen aus einer MySQL-Datenbak aufnehmen. Die Daten aus beiden Tabellen die miteinander verknüpft sind sollen in einem Dialogfeld in einem CListCtrl ausgegeben werden. Wie nehme ich die Verbindung zu den Tabellen auf? Leitet man für jede Tabelle der Datenbank eine eigene Klasse von CRecordset ab? Ich habe versucht eine Neue Klasse einzufügen, diese von CRecordset abzuleiten was auch funktioniert. Jedoch weiß ich nich wie ich auf die Membervariablen des Neu-erstellten Recordsets zugreife.
Vielleicht kann mir jemand weiterhelfen. Danke schon mal!
 
Das ist katastrophal umständlich mit den Recordsets und erklärt ist es auch nicht vernünftig.
Wie du schon erkannt hast, musst du dir für jede Tabelle eine Klasse von CRecordset abgeleitet anlegen lassen. Allerdings am besten nicht direkt über den Klassenassistenten.

Wenn du mit ODBC arbeitest (pfuiäbäh), über Projekt->Klasse hinzufügen->MFC-ODBC-Consumer. Dann kannst du eine Tabelle aus der Datenbank auswählen zu der eine Klasse erzeugt wird.

Wenn nicht, dann musst du per Hand ran. Eine Klasse von CRecordset ableiten, CString-Member für alle Spalten, die Anzahl-Variable nicht vergessen und die RFX_DATA-Macros für alle Member einsetzen. Theoretisch wars das schon, ich habe immer nur mit ODBC gearbeitet, kann also sein, dass ich daneben liege.
 
So weit klappt ja auch alles. Ich möchte nun aus der View auf die einzelnen Tabellen zugreifen. Wenn man eine automatische SDI-Anwendung mit Datenbankunterstützung vom Klassenassistenten erstellen lässt befindet sich ja in der View eine Member-Variable m_pSet über die ich beispielsweise in der folgenden Form auf die Spalte name einer Tabelle zugreifen kann. m_pSet->m_name. Wenn ich jetzt für eine weitere Tabelle eine Recordset-Klasse ableite, dann besteht ja das Problem, dass keinerlei Verbindung zur View besteht. Ich hab also versucht, wie aus dem automatisch erzeugten Code nun für eine weitere Tabelle eine Membervariable in der View anzulegen, hab diese auch im Konstruktor mit NULL initialisiert. Wenn ich allerdings versuche mit Hilfe dieser Membervariable auf Werte aus meiner Tabelle zuzugreifen bricht das Programm mit einem nicht näher definierten Ausnahmefehler ab.
 
Ohje, so rum habe ich es nie probiert, da kann ich dir also nicht wirklich helfen.
Wenn du aber sagst, du hast den automatisch angelegten Code für die neue Tabelle kopiert, müsste ausser der NULL-Initialisierung ja auch irgendwo eine Zuordnung auf die tatsächliche Tabelle vorkommen (sonst greifst du ja auf den Null-Pointer zu). Wenn du dem MFC-Sourcecode mit installiert hast, kannst du da reindebuggen, an dem Ausnahmefehler müsste eigentlich ein ASSERT schuld sein. Wenn das der Fall ist, steht bei den ASSERTs meistens (oder manchmal) der Grund dafür.
 
Zurück