Wie spreche ich meine selbst erstellte MFC ODBC Klasse an?



  • Ich habe eine neue Klasse erstellt mit Namen Clog. Es ist eine MFC Klasse mit ODBC welche auf eine Tabelle zeigt. Inhaltlisch ist sie wie die C...Set.

    Nun möchte ich in meiner Funktion in der Klasse C...View diese Klasse ansprechen können, so dass ich in die Tabelle auf die verwiesen wird Daten eintragen kann. Also es geht dabei immer nur darum Daten einzutragen.

    Ich hab echt kein Rat und mit der MSDN komm ich irgendwie nicht zurecht.



  • Du musst deine Klasse includen und kannst dann schon loslegen.

    Oder was genau fehlt dir? 😕



  • So einfach ist das aber nicht. Wie gesagt es ist ja eine Klasse die über ODBC auf meine MySQL Tabelle zugreift. Bei der Standardklasse C...Set steht ja im Prinzip das selbe, nur für eine andere Tabelle. Es geht jetzt darum, das ich die neue Klasse anspreche um Daten in die Tabelle einzutragen. Bei der Standardklasse passiert der Zugriff über m_pSet. Ich kenn mich damit noch zu wenig aus umd das logisch zu verfolgen.

    Ich bräuchte echt mal ein Beispiel. Hier gibts schon soviele Beitrege wo Leute schreiben, man soll für jede Tabelle die man anspricht eine eigene Klasse erstellen, aber es wird nie geschrieben wie.

    Hoffe einer hat Rat und ein Beispiel.

    Danke im Voraus ...



  • Ist deine Klasse von CRecordset abgeleitet oder was ganz selbstgestriktes?



  • Ja, also ich bin in die Klassenansicht gegangen, habe gesagt neue Klasse erstellen. Das ganze als MFC mit ODBC welche auf meine Datenbank und Tabelle verweist. Agbeleitet ist die Klasse von CRecordset. Sprich genau wie die Standardklasse C...Set die durch den Wizzard erstellt wird, nur das meine neue halt eine andere Tabelle anspricht.

    Und ne Idee ;o) Ich brauch ja erst mal ein Bezug zu der Klasse. Wie dieses m_pSet. Diese Klasse muss eigentlich echt nur pro Schleifendurchlauf einen Datensatz in die Tabelle hauen. Ich brauch keine Abfrage, ich muss die Daten nicht auswerten. Das ist nur eine "log" Tabelle.

    Das blöde ist, ich steh extrem unter Zeitdruck und brauche ganz ganz schnell zu dem Problem eine Antwort.



  • Vielleicht so:
    - am Anfang deiner C...View wie bereits erwähnt die neue Klasse includieren: #include "log.h" (der Name der Headerdatei ist meist ohne das führende C)
    - in deiner Funktion in der Klasse C...View ein Objekt der neuen Klasse erzeugen: Clog logObj;
    - mit dem Objekt logObj stehen dir jetzt die RecordSet-Funktionen zur Verfügung (analog dem m_pSet, also z.B. logObj.Open() oder logObj.MoveNext() usw.)
    Pointer besprechen wir dann später 😉



  • Achso, du willst in der Datenbanktabelle eine Zeile einfügen - sag das doch!

    Hier ne Schnellkopie von meinem aktuellen Projekt:

    // Neuen Datensatz einfügen
    		m_Set.AddNew();
    
    		// Neue ID erzeugen lassen - ist für Access nicht nötig 
    
    		if (!m_Set.SetPlz(strPlz))
    		{
    			// Fehler
    		         // Der Rest wird übersprungen.
    			return;
    		}
    		if (!m_Set.SetOrt(strOrt))
    		{
    			// Fehler
    			// Der Rest wird übersprungen.
    			return;
    		}
    
    		// Den neuen Datensatz in die Datenbank schreiben
    		m_Set.Update();
    		// Die Daten neu lesen
    		m_Set.Requery();
    

    Hast du das gesucht? 🙂

    PS: Das hab ich von hier abgeschrieben, das erste Kapitel aus dem Buch, das ich nützlich finde:
    http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/kap14.htm



  • Hallo, erstmal vielen Dank für eure Tipps.

    Aber ...

    ich habe wie gesagt die Klasse includet.

    Anschließend müsste das ja ausreichen um einen Datensatz in die Tabelle zu hauen:

    Klassenname: ClogSet
    include logSet.h

    ClogSet logObj;
    logObj->AddNew();
    logObj->m_ID = 0;
    logObj->m_zeit = "13:15:58";
    logObj->m_verzeichnis = "VO99.9";
    logObj->m_status = "KOPIERT";
    logObj->Update();
    

    Leider kommen diese Fehler:

    error C2819: Der Typ 'ClogSet' hat keinen ueberladenen Elementoperator '->'
    Siehe Deklaration von 'ClogSet'
    Der linke Teil von '->AddNew' muss auf Klasse/Struktur/Union zeigen
    Der Typ 'ClogSet' hat keinen ueberladenen Elementoperator '->'
    Siehe Deklaration von 'ClogSet'
    Der linke Teil von '->m_ID' muss auf Klasse/Struktur/Union zeigen
    Der Typ 'ClogSet' hat keinen ueberladenen Elementoperator '->'
    Siehe Deklaration von 'ClogSet'
    Der linke Teil von '->m_zeit' muss auf Klasse/Struktur/Union zeigen
    Der Typ 'ClogSet' hat keinen ueberladenen Elementoperator '->'
    Siehe Deklaration von 'ClogSet'
    Der linke Teil von '->m_verzeichnis' muss auf Klasse/Struktur/Union zeigen
    Der Typ 'ClogSet' hat keinen ueberladenen Elementoperator '->'
    Siehe Deklaration von 'ClogSet'
    Der linke Teil von '->m_status' muss auf Klasse/Struktur/Union zeigen
    Der Typ 'ClogSet' hat keinen ueberladenen Elementoperator '->'
    Siehe Deklaration von 'ClogSet'
    Der linke Teil von '->Update' muss auf Klasse/Struktur/Union zeigen

    BITTE HELFT MIR ;O)

    NACHTRAG:
    ICH GLAUBE DA ICH KEINE POINTER VERWENDE WIRD NICHT "->" SONDERN "." GESCHRIEBEN. WERDE ES HEUTE ABEND AUSPROBIEREN.

    NOCHMALS DANKE FÜR EURE HILFE!!!



  • . statt ->

    Das ist doch kein Zeiger sondern ein Objekt.



  • Leute ich flipp echt noch aus. Das geht bei mir in einem SCHNECKENTEMPO voran. Ich kack echt noch ab.

    Der Code an sich müsste jetzt gehen.

    Habs dann wie gesagt auch so gemacht:

    ClogSet logObj;
    logObj.AddNew();
    logObj.m_ID = 0;
    logObj.m_zeit = "15:15";
    logObj.m_verzeichnis = "VO99.9";
    logObj.m_status = "kopiert";
    logObj.Update();

    Die Syntax muss richtig sein, weil wenn ich mit logObj. beginne kommt die Auswahl was mir alles zu Verfügung steht. Ich führe das ganze aus und es kommt ein Fehler. Nachdem ich auf Ignorieren geklickt habe, schreibt er dass man nur lesen kann und nicht schreiben.

    WAS MACH ICH FALSCH????? 😕

    In dem tollen Buch Visual C++ in 21 Tagen habe ich auch das ODBC Projekt durchgeführt und da hat er den Datensatz eingetragen. ICH VERSTEH ES EINFACH NICHT!

    -----------------------------------------------------------------------------
    estartu_de geb mir doch bitte mal deine E-Mail, wenn du mir helfen kannst. Ich brauch dieses Wochenende unbedingt noch ein Ergebnis. Ich werde wenn es dann alles geklappt hat auch ins Forum posten woran es lag. Aber ich hab nicht die Zeit zu warten dass du dir evtl. noch mal den Post anguckst. Danke im Voraus Gruß Sergio



  • 🙂 ICH HABS ;o) Man muss das ganze natürlich erst ÖFFNEN ;o)

    Trotzdem vielen Dank für die restlichen Ansätze. Ihr habt mir echt geholfen.

    ClogSet logObj; 
    logObj.Open();
    logObj.AddNew(); 
    logObj.m_ID = 0; 
    logObj.m_zeit = "15:15"; 
    logObj.m_verzeichnis = "VO99.9"; 
    logObj.m_status = "kopiert"; 
    logObj.Update();
    logObj.Close();
    

Log in to reply