Mehrere Tabellen in einer Datebank und C++
-
Hi Leutz,
ich hab mal wieder ein Problem mit meiner berüchtigten DOBC-Datenbank.
Ich hab in die DB (content-mdb) zwei Tabelle eingefügt, die erste heißt content_latein, die zweite content_deutsch. In jeder Tablle sind genau die selben Spalten enthalten. Ich hab dann in meiner CDBSet-Klasse (abgeleitet von CRecordset) geschrieben:CDBSet::CDBSet(CDatabase* pdb) : CRecordset(pdb) { //{{AFX_FIELD_INIT(CDBSet) //[content_latein] m_ID_LATEIN = 0; m_INPUT_LATEIN = _T(""); m_GESCHLECHT_LATEIN = _T(""); m_STAMMREIHE_LATEIN = _T(""); m_WORTART_LATEIN = _T(""); m_DEKLREIHE_LATEIN = _T(""); m_LEKTION_LATEIN = _T(""); m_OUTPUT_LATEIN = _T(""); //[content_deutsch] m_ID_DEUTSCH = 0; m_INPUT_DEUTSCH = _T(""); m_GESCHLECHT_DEUTSCH = _T(""); m_STAMMREIHE_DEUTSCH = _T(""); m_WORTART_DEUTSCH = _T(""); m_DEKLREIHE_DEUTSCH = _T(""); m_LEKTION_DEUTSCH = _T(""); m_OUTPUT_DEUTSCH = _T(""); //allgemein m_nFields = 16; //}}AFX_FIELD_INIT m_nDefaultType = dynaset; }
In die - hoffentlich blickt noch jemand durch - DoFieldExchange-Methode hab ich
pFX->SetFieldType(CFieldExchange::outputColumn); //[content_latein] RFX_Long(pFX, _T("[content_latein].[ID]"), m_ID_LATEIN); RFX_Text(pFX, _T("[content_latein].[INPUT]"), m_INPUT_LATEIN); RFX_Text(pFX, _T("[content_latein].[GESCHLECHT]"), m_GESCHLECHT_LATEIN); RFX_Text(pFX, _T("[content_latein].[STAMMREIHE]"), m_STAMMREIHE_LATEIN); RFX_Text(pFX, _T("[content_latein].[WORTART]"), m_WORTART_LATEIN); RFX_Text(pFX, _T("[content_latein].[DEKLREIHE]"), m_DEKLREIHE_LATEIN); RFX_Text(pFX, _T("[content_latein].[LEKTION]"), m_LEKTION_LATEIN); RFX_Text(pFX, _T("[content_latein].[OUTPUT]"), m_OUTPUT_LATEIN); //[content_deutsch] RFX_Long(pFX, _T("[content_deutsch].[ID]"), m_ID_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[INPUT]"), m_INPUT_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[GESCHLECHT]"), m_GESCHLECHT_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[STAMMREIHE]"), m_STAMMREIHE_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[WORTART]"), m_WORTART_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[DEKLREIHE]"), m_DEKLREIHE_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[LEKTION]"), m_LEKTION_DEUTSCH); RFX_Text(pFX, _T("[content_deutsch].[OUTPUT]"), m_OUTPUT_DEUTSCH);
geschrieben.
Das Problem: Wenn ich versuche, die Datenbank zu öffnen, sagt mir Windows immer
"8 Parameter wurden erwartet, aber es wurden zu wenig übergeben."
Weiß hier jemand, woran das liegt?
Danke für eure Hilfe. Und tschuldigung, dass ich euch immer mit den selben Themen nerve...
CHM
PS: Versteht sich von selbst, dass alle Variablen schon in der Klasse vorher richtig definiert wurden...
[ Dieser Beitrag wurde am 26.09.2002 um 21:56 Uhr von MP editiert. ]
-
Ich fürchte, du musst für jede Tabelle einen eigenen Recordset anlegen. Zwei Tabellen in einem Recordset geht IMHO nicht in MFC.
-
m_nFields = 16;
Deine Tabelle hat ja auch nicht 16 Felder sondern nur 8.
Warum du 16 geschrieben hast weiß ich da du ja beide Tabellen in einem SET haben wolltest. Die Recordset geht aber davon aus, daß die Tabelle 16 statt 8 Felder hat
thomas80d hat die Lösung bereits geschrieben.
-
Danke. Werd' ich nachher gleich mal probieren.
Wenn ich jetzt schreibe:
m_db_set.Open(CRecordset::dynaset, "[content_latein]", CRecordset::readOnly);
muss der Anwender die Datenbank selbst auswählen. Kann man das net automatisieren?