Probleme mit SQL_Datenbankanbindung



  • Irgendwie habe ich grade leichte Verständnissprobleme :> Könnte daran liegen das ich mich nie so richtig mit Klassen beschäftigt habe 😕

    Ich erstell das Projekt mit dem MFC Assistenten und wähle halt meine Datenbank aus und alle meine Tabellen per ODBC. Denn leite ich mir 4 Klassen von CRecordSet ab?
    Ich will halt in meinem Fenster mehrere Edit Felder für Eintragen von Kundendaten usw haben. Und nen paar sachen aus der Datenbank anzeigen lasse.



  • Du gehst in den Klassenassitenten und wählst als Basisklasse CRecordset, dann will er das du eine Datenquelle angibts. Dort wählst du dann immer nur EINE Tabelle aus. Das machst du mit jeder Tabelle, auch wenn sie aus derselben Datenquelle kommen.
    In deinem Dialog musst du dann halt alle CRecordset-Klassen benutzen, die du brauchst.



  • Ja bloss wie kann ich mit allen Klassen in meinem Dialog arbeiten? Hab bis jetzt halt immer beim Erstellen des projektes meine Tabelle ausgewählt und konnte denn über m_pSet meinen Edit Feldern die Spalten zuordnen 😕 Dies geht ja nun nicht wenn ich erst nen Projekt ohne Datenbank erstell und denn erst später im Klassen Assistenten Neue Klassen ableite.



  • Du legst einfach eine Variable vom passenden Typ an.
    Wenn deine Tabelle z.B. Kunden heisst, nennt man das Recordset gerne CKundenSet.
    Und wenn du nun z.B. eine Combobox (m_cbxKunde) mit den Namen füllen willst geht das so:

    CKundenSet kndSet;
    kndSet.Open();
    while (!kndSet.IsEOF())
    {
        m_cbxKunde.AddString(kndSet.GetKundenname());
        kndSet.MoveNext();
    }
    

    Das m_pSet ist ja auch nur eine Membervariable des CRecordView.
    Du kannst das Kundenset auch als Membervariable vom Dialog machen, ich habe nur eine lokale gewählt, weil das als Beispiel kompakter ist. 🙂



  • Werd ich morgen früh mal ausprobieren. Danke für die Hilfe 🙂



  • Hmm also momentan funzt bei mir GAR NIX. Hab mir mal eben neues Programm erstellt mit dem MFC Assistenten, und unter Datenbankanbindung,einfach keine Datenbankunterstützung ausgewählt. Uund nun nach dem ableiten der Klasse CRecordset haut er mir 64 Fehler raus. O_o Muss ich beim Assistenten noch "Nur Header-Dateien" mit anklicken???Weil bei den anderen Optionen will er ja schon gleich Tabellen haben. Bald arbeite ich nur noch mit einer Tabelle... da funzt es wenigstens 😞

    Btw.: Das mit der ComboBox hat auch noch ned ganz hingehauen, liegt wohl aber eher an meiner momentanen Unfähigkeit



  • Auch ohne die Fehler gesehen zu haben...

    #include <afxdb.h>
    

    🙄

    Wenn ich falsch liege, zeig doch mal die ersten Fehler - die anderen sind oft Folgefehler.



  • So hab einfach beim Assistenten Nur Header Dateien aktiviert. Und nun geht es mit den Klassen. Das mit den Editfeldern hab ich leider noch ned raus.



  • Also das mit der ComboBox ist nicht so was ich machen wollte.
    Ich wollte halt für jede Spalte meiner Kundentabelle ein EditFeld anlegen. Also Vorname,Nachname usw. Und denn halt im Grunde das jeweilige EditFeld mit der Variable aus meiner Kundendatenbank verknüpfen. Um denn die Daten in die Editfelder einzutragen und in der Datenbank zu speichern.



  • Soweit ich weiß geht es nicht ohne Zwischenschritt über die Variablen des Dialoges.
    Oder was meinst du? 😕



  • Ja ich hab ja halt in meinen Klassen die Variablen wie m_Vorname aus meiner Tabelle. Also müsste ich zuerst die Daten in die Variablen des Dialogs eintragen und die denn in die Variablen von der Tabelle wie m_Vorname übergeben?



  • Wieviele Klassen hast du jetzt? 😕

    Ich bin ausgegangen von:
    Ein Recordset
    Ein Dialog

    Da wäre der Weg:
    Recordset.Variable -> Dialog.VariableFürEinControl -> UpdateData(FALSE)
    oder eben
    UpdateData(TRUE) -> Dialog.VariableFürEinControl -> Recordset.Variable



  • hallo
    mit mehre tabbellen ist einfach und du sollst keine panik haben.

    du kannst ein neuen Projekt legen und normal mit einem DB verbinden und nur mit einer Tabelle. und fertig.
    willst du 2te tabelle dann auf dem klassen ansicht -> rechtmaustatste und klassen einfügen MFC ODBC Consumer dann wählst du die 2te tablle.
    der assistenten macht alles für dich .
    vergiss hen Header einzufügen in deinem view kalsse

    #include"neueklasse.h"
    


  • das kannst du denn machen für beliebige tabellen.

    aber wichtig
    DU DARFST NICHT
    wenn du eine klasse a hat include b
    darfst du nicht klasse b nachher include klasse a...sonst salat von Fehler



  • dokdok schrieb:

    aber wichtig
    DU DARFST NICHT
    wenn du eine klasse a hat include b
    darfst du nicht klasse b nachher include klasse a...sonst salat von Fehler

    Lösung: http://www.c-plusplus.net/forum/viewtopic-var-t-is-112693.html 🙂



  • Frage?
    kann man funktion von klasse a in klasse b rufen ? und auch funktion von klasse b in klasse a rufen?
    ist es das eine mit include"xxxx.h" und das andere mit class Cklass;
    wird mir intressiren. ich probiere mal



  • dokdok schrieb:

    Frage?
    kann man funktion von klasse a in klasse b rufen ? und auch funktion von klasse b in klasse a rufen?
    ist es das eine mit include"xxxx.h" und das andere mit class Cklass;
    wird mir intressiren. ich probiere mal

    Das sollte funktionieren. Ist ja hinter dem Link erklärt. 🙂



  • estartu_de schrieb:

    Wieviele Klassen hast du jetzt? 😕

    Ich bin ausgegangen von:
    Ein Recordset
    Ein Dialog

    Da wäre der Weg:
    Recordset.Variable -> Dialog.VariableFürEinControl -> UpdateData(FALSE)
    oder eben
    UpdateData(TRUE)-> Dialog.VariableFürEinControl -> Recordset.Variable

    Ich habe 4 Tabellen somit 4 Klassen abgeleitet von CRecordSet und einmal mein Dialogfenster(Basisklasse CFormView)



  • dokdok schrieb:

    hallo
    mit mehre tabbellen ist einfach und du sollst keine panik haben.

    du kannst ein neuen Projekt legen und normal mit einem DB verbinden und nur mit einer Tabelle. und fertig.
    willst du 2te tabelle dann auf dem klassen ansicht -> rechtmaustatste und klassen einfügen MFC ODBC Consumer dann wählst du die 2te tablle.
    der assistenten macht alles für dich .
    vergiss hen Header einzufügen in deinem view kalsse

    #include"neueklasse.h"
    

    Ja denn kann ich zwar über m_pSet die eine Tabelle auswählen muss für die anderen Tabellen es dann aber auch anders machen.



  • reda schrieb:

    Ja denn kann ich zwar über m_pSet die eine Tabelle auswählen muss für die anderen Tabellen es dann aber auch anders machen.

    Dann guck doch mal, wie das mit dem m_pSet funktioniert und bau dir m_pSet2 bis n. 🙄

    Du musst da nix anders oder besonderes machen. Nur gucken, wie der Assistent das macht und abschreiben.


Anmelden zum Antworten