Zugriff auf mehrere Tabellen(Access-Datenbank) mit ODBC
-
Hallo,
ich habe eine MFC-Anwendung die Daten in eine Access-Datenbank in der Tabelle
TAB_1 speichert. Das funktioniert auch soweit. Ich habe eine Klasse von
CRecordSet abgeleitet und damit greife ich auf die Tabelle TAB_1 in der Datenbank.Ich habe jetzt mit Access eine weitere Tabelle angelegt und auf die möchte ich zugreifen. Wie kann ich auf die zweite Tabelle zugreifen, ich kriege es nicht hin. Kann mir jemand ein wenig Code für den Zugriff auf mehr wie eine Tabelle posten. Währe sehr dankbar!
Gruß
bbatec
-
Genauso wie auf die erste. Eine Klasse von CRecordSet ableiten.
-
Hallo Unix-Tom,
das heisst ich muss für jede Tabelle die in der einen Datenbank ist eine neue
Klasse (CRecordSet abgeleitet) erstellen und jedesmal die Verbindung zur Datenbank aufbauen. Gibt es keine Möglichkeit mit nur einer von CRecordSet abgeleiteten Klasse auf mehrere Tabellen zuzugreifen?Danke!
Gruß
bbatec
-
Es könnte evtl. funktionieren, wenn du eine entsprechende View/Abfrage über mehrere Tabellen erstellst und dann eine von CRecordSet abgeleitete Klasse auf die View erstellst. Eine andere Möglichkeit ist mir nicht bekannt...
-
Es gibt andere Möglichkeiten aber nicht wenn man dafür eine MFC-Klasse verwenden will.
CRecordSet sagt es ja schon das du diese an eine Tabelle binden musst.Du kannst auch meine ODBC-Klasse verwenden wenn es nicht kommerziel ist. www.sensorme.de/dateien/odbc.zip
Die Header ist IMHO selbsterklärend.
-
Wieso ableiten?
CDatabase db; db.OpenEx("odbc", 0); CRecordset Set(&db); CString strSQL = "select spalte1, spalte2 from tabelle1"; Set1.Open(CRecordset::dynaset | CRecordset::forwardOnly, strSQL); strSQL = "select spalte1, spalte2 from tabelle2"; Set2.Open(CRecordset::dynaset | CRecordset::forwardOnly, strSQL); CString strValue; while(!Set1.IsEOF()) { Set1.GetFieldValue(1, strValue); AfxMessageBox(strValue); Set1.MoveNext(); } while(!Set.IsEOF()) { Set2.GetFieldValue(1, strValue); AfxMessageBox(strValue); Set2.MoveNext(); } Set1.Close(); Set2.Close();
sowas?
-
Hallo,
erstmal vielen Dank für die Antworten!
Nur noch mal zum Verständniss.
Ich habe in dem Buch Visual C++ Windows Progr. mit den MFC" ein Beispiel gefunden wo man über eine von CRecordSet abgeleiteten Klasse auf beiden Tabellen in der Datenbank zugreift, allerdings nur zum Lesen.
Meine Frage, kann es vielleicht so sein dass man zum "Lesen" auf mehrere Tabellen zugreifen kann, will man aber Datensätze hinzufügen, dann nur aber über 2 von CRecordSet abgeleiteten Klassen (für z.B. 2 Tabellen in der Datenbank)?Würde mich freuen wenn ihr mir das erklären könntet!
Danke!
-
Ja, wenn du das mit der AddNew()-Methode machen willst wohl schon.
Du kannst natürlich auch einfach nen SQL an die Datenbank schicken und dann eine eventuell auftretende CDBException abfangen:
try { db.ExecuteSQL("INSERT INTO tabelle1 (Spalte1, Spalte2) VALUES (val1, val2)"); } catch (CDBException e) { CString strErrorMsg1(e->m_strStateNativeOrigin); CString strErrorMsg1(e->m_strError); e.delete }
mfg
tobi
-
Das Beispiel würde mich glatt mal interessieren, auch wenn ich mich mit den Recorsets mittlerweile ganz brauchbar rumschlage.
Zum Thema: Ich meine mich daran zu errinnern, dass man eine Datenänderung immer nur für eine Tabelle machen kann. Views sind, wie der Name schon sagt, zum Angucken da.