Access Datenbank mit mehreren Tabellen ansprechen



  • Hallo zusammen,

    ich benutze Miscrosoft Visual C++ 6.0 und Win XP Prof.

    Ich möchte mit meinem Programm Daetn in eine MS Access Datenbank speichern.
    Wenn ich mit dem Wizard am Anfang arbeite,stell ich ODBC ein und wähle dann meine Datenbank aus.
    Wenn diese Datenbank nur eine Tabelle besitzt, ist das ganze kein Problem.
    Aber sobald ich mehrere Tabelen einfüge und diese beim Wizard auch auswähle, bekomme ich im Programm eine Fehlermeldung:

    Datensatzgruppe kann nur gelesen werden!

    gibt es dafür eine Lösung, oder darf ich tatsächlich nur EINE Tabelle in meiner Datenbank haben?

    Vielen Dank
    MfG Dippi



  • Du darfst schon mehrere Tabellen in deinem Programm haben, darfst aber immer nur in eine Tabelle schreiben.



  • Hallo,

    und wie schreib ich immer nur in eine Tabelle???
    Also ich wähle beim Wizard zuest meine Datenbank.
    Dann kann ich die Tabellen auswählen, da nehme ich alle (sind 3 Stück).
    Simples Bsp.:
    Ich mach mir in der FormView einen Button und eine EditBox zum testen.
    Fkt ButtonKlick:

    void CTest2View::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    	CRecordset* pSet = OnGetRecordset();
    	m_pSet->AddNew();
    
    }
    

    Und schon bei dieser 2 Zeilen bekomme ich die Fehlermeldung-und zwar wegen der Zeile:

    m_pSet->AddNew();
    

    Muss ich da irgendwie vorher die Tabelle auswählen???
    Vielen dank für jede Hilfe
    MfG Dippi



  • Dippi_81 schrieb:

    Dann kann ich die Tabellen auswählen, da nehme ich alle (sind 3 Stück).

    Mach mal für jede einzelne Tabelle eine von CRecordset abgeleitete Klasse, dann kannst du auch schreiben.



  • Hmm bitte nicht lachen,aber da stoß ich an meine Grenzen 😉

    Ich erstelle die MyView.cpp und MyView.h mit dem Wizard zu Beginn.
    Diese Klasse ist von CRecordset abgeleitet.

    Die genaueren Einstellungen sind doch in der MySet.cpp / MySet.h oder?
    MfG



  • ja, da hast du wahrscheinlich beim erstellen vom Programm alle Tabellen ausgewählt und da stehen jetzt alle Tabellen drin.

    Mach anstatt dem einen CRecordset einfach per Klassenassistent 3 Recordsets, also für jede Tabelle eine.
    (Vorsicht die DB muss sich in deinem Projektordern befinden sonst zickt VC++6 rum, zumindest bei mir)

    Edit:
    Wenn ich in ne DB schreiben will arbeit ich gern direkt mit SQL, find ich irgendwie bequemer:

    m_pSet->m_pDatabase->ExecuteSQL("DeinSQLBefehl");
    


  • Ok also beim Wizard am Anfang hatte ich alle 3 Tabellen ausgewählt.Stimmt!!!
    Respekt!

    Also eine Tabelle muss ich auswählen,hab ich grad ausprobiert.
    Und dann Klassenassistent, und dann weiter?
    Sorry,aber hab das noch nicht gemacht!!!
    aber schonmal vielen Dank für die Hilfe
    MfG Dippi



  • Klassenassistent
    Klasse hinzufügen->Neu
    z.b. CDeineAndereTabelleSet als Name
    und von CRecordSet ableiten (Basisklasse)

    wenn er da nen Fehler bringt, kopier mal die Datenbank in den Projektordner sonst erstellt er die .cpp und .h Dateien da wo die Datenbank liegt (ka warum VC++6 das macht) und legt die Klasse nicht richtig an.

    Dann musst du in deinem Programm die RecordSets öffnen und Schliessen wie du sie brauchst. Einfach mit Open() bzw Close(). (ich glaub zumindest es darf immer nur ein RecordSet gleichzeitig offen sein, kann mich aber auch irren)



  • Vielen Dank für Deine Hilfe.
    Hat funktioniert!!!
    MfG Dippi



  • Jetzt hab ich doch nochmal eine Frage.

    Also mit dem ersten Recordset funktioniert alles.
    Nur wenn ich mir dann den zweiten einbauen will, bekomme ich Probleme.
    Ich mach einfach alles was mir am Anfang automatisch erstellt wurde...also mit dem m_pSet
    nochmal.
    Das ganze aber halt dann z.b. mit
    m_pSet1

    Nur es funktioniert nicht.

    Wie genau kann ich denn wenn ich einen zweiten Recordset habe, diesen dann auch benutzen,so dass ich Zugriff auf meine Tabelle habe?
    Danke
    Mfg Dippi


Anmelden zum Antworten