MySql --> mit c++ daraus lesen geht, aber wie schreib ich was in die Datenbank



  • Hallo !!

    Ich hab mir mit der MFC eine anwendung erstellt und greife damit auf meine MySql Datenbank zu.

    Das klappt ja auch prima, die Daten werden angezeigt.

    Aber wenn ich nun einen Datensatz ändern will, wie krieg ich das hin ?

    Heinz



  • also hat sich dein erstes mysql/c++ thema wohl erledigt.

    hm, hast du dich schon mal auf der website von mysql umgeschaut. so weit ich weiss gibt es dort eine menge dokumentation.

    und was du hier anfragst hat nichts mit mfc oder visual c++ zu tun!

    du hast sicherlich ein 'select' querie benutzt um daten auszulesen. dann schau dir mal die dokumentation von 'insert' und 'update' auf mysql.com an.



  • Hallo !

    Ich denke doch, da ich mir das ganze ja mit dem Assistenten erstellt habe - MFC Anwendungs Assistent(exe) -> einzelnes Dokument(SDI) -> Datenbankansicht mit Dateiunterstützung -> Datenquelle ODBC myodbc3-test -> Datenbanktabelle -> Basisklasse = CRecordView

    Auf dem Formular hab ich mir Eingabefelder erstellt -> ID_Record_First -> Command und dann Funktion OnRecordFirst = On_ID_Record_First:Command

    Das gleiche mit Last, Next und Prev

    Dann Member Variable IDC_Edit1 = m_vorname, IDC_Edit2 = m_name etc...

    Dann Member Funktion ShowData erstellt in Klasse view

    void CAdressenView::OnRecordFirst() 
    {
    	m_pSet->MoveFirst(); 
             ShowData(); 
    }
    
    void CAdressenView::OnRecordLast() 
    {
    	m_pSet->MoveLast(); 
             ShowData(); 
    }
    
    void CAdressenView::OnRecordNext() 
    {
    	m_pSet->MoveNext(); 
             ShowData(); 	
    }
    
    void CAdressenView::OnRecordPrev() 
    {
    	m_pSet->MovePrev(); 
             ShowData(); 	
    }
    
    void CAdressenView::ShowData()
    {
    m_geb           = m_pSet->m_geb;
    m_hausnummer    = m_pSet->m_hausnummer;
    m_name          = m_pSet->m_name;
    m_nr            = m_pSet->m_nr;
    m_ort           = m_pSet->m_ort;
    m_plz           = m_pSet->m_plz;
    m_strasse       = m_pSet->m_strasse;
    m_telefon       = m_pSet->m_telefon;
    m_vorname       = m_pSet->m_vorname;
    

    Und so werden mir die einzelnen Daten dann in meinen Feldern angezeigt und ich kann hin und her blättern.

    Nur reinschreiben geht nicht - und das möchte ich gerne wissen, wie das funktioniert.

    Heinz

    alex-t schrieb:

    also hat sich dein erstes mysql/c++ thema wohl erledigt.

    hm, hast du dich schon mal auf der website von mysql umgeschaut. so weit ich weiss gibt es dort eine menge dokumentation.

    und was du hier anfragst hat nichts mit mfc oder visual c++ zu tun!

    du hast sicherlich ein 'select' querie benutzt um daten auszulesen. dann schau dir mal die dokumentation von 'insert' und 'update' auf mysql.com an.



  • puh...
    ich glaube ich bin heute mit dem falschen fuss aufgestanden.

    kleiner doofer spruch von mir: kann ich hellsehen?

    nö!

    woher soll ich nach deinem sehr informativen post wissen, dass du über odbc auf mysql zugreifst?

    "MySql --> mit c++ daraus lesen geht, aber wie schreib ich was in die Datenbank"

    heinz1 schrieb:

    Hallo !

    Ich denke doch, da ich mir das ganze ja mit dem Assistenten erstellt habe - MFC Anwendungs Assistent(exe) -> einzelnes Dokument(SDI) -> Datenbankansicht mit Dateiunterstützung -> Datenquelle ODBC myodbc3-test -> Datenbanktabelle -> Basisklasse = CRecordView

    Auf dem Formular hab ich mir Eingabefelder erstellt -> ID_Record_First -> Command und dann Funktion OnRecordFirst = On_ID_Record_First:Command

    Das gleiche mit Last, Next und Prev

    Dann Member Variable IDC_Edit1 = m_vorname, IDC_Edit2 = m_name etc...

    Dann Member Funktion ShowData erstellt in Klasse view

    void CAdressenView::OnRecordFirst() 
    {
    	m_pSet->MoveFirst(); 
             ShowData(); 
    }
    
    void CAdressenView::OnRecordLast() 
    {
    	m_pSet->MoveLast(); 
             ShowData(); 
    }
    
    void CAdressenView::OnRecordNext() 
    {
    	m_pSet->MoveNext(); 
             ShowData(); 	
    }
    
    void CAdressenView::OnRecordPrev() 
    {
    	m_pSet->MovePrev(); 
             ShowData(); 	
    }
    
    void CAdressenView::ShowData()
    {
    m_geb           = m_pSet->m_geb;
    m_hausnummer    = m_pSet->m_hausnummer;
    m_name          = m_pSet->m_name;
    m_nr            = m_pSet->m_nr;
    m_ort           = m_pSet->m_ort;
    m_plz           = m_pSet->m_plz;
    m_strasse       = m_pSet->m_strasse;
    m_telefon       = m_pSet->m_telefon;
    m_vorname       = m_pSet->m_vorname;
    

    Und so werden mir die einzelnen Daten dann in meinen Feldern angezeigt und ich kann hin und her blättern.

    Nur reinschreiben geht nicht - und das möchte ich gerne wissen, wie das funktioniert.

    Heinz

    alex-t schrieb:

    also hat sich dein erstes mysql/c++ thema wohl erledigt.

    hm, hast du dich schon mal auf der website von mysql umgeschaut. so weit ich weiss gibt es dort eine menge dokumentation.

    und was du hier anfragst hat nichts mit mfc oder visual c++ zu tun!

    du hast sicherlich ein 'select' querie benutzt um daten auszulesen. dann schau dir mal die dokumentation von 'insert' und 'update' auf mysql.com an.

    und jetzt zum thema:

    mysql brauchst du nicht zu schreiben, da das hier nichts mysql spezifisches mehr ist. was du brauchst ist etwas odbc know-how. davon findest du im forum reichlich, und auch die msdn bietet bekanntlich einiges an beispielen und erklärungen!

    da du keine mysql api benutzt, sondern den odbc treiber, schau einfach in die faq und benutz die suchfunktion.



  • Jetzt muss ich heinz1 aber mal unterstützen! 😡

    Ich lese seit Monaten mit, in der Hoffnung, dass genau dieses Thema endlich mal beantwortet wird. Ich suche nämlich auch nach Antworten auf exakt diese Fragen.

    Ich hatte sie auch schon mal bekommen, MySQL spezifisch. Aber leider hat sich das DBMS geändert und könnte sich nochmal ändern. Also möchte ich dass jetzt wirklich gerne mit den Klassen der MFC erschlagen.

    @alex-t: Wenn es schon so oft im Forum stand, warum zum Henker (*explodier*) finde ich es nicht? Mit welchen Suchbegiffen findet man die Beträge?
    Achja, ich vergaß: Die Suche ist ja immernoch kaputt. Man findet also hier im Forum nix.
    Wenn du dich noch dran errinnerst, poste doch mal die Links oder hast du vielleicht ein Beispielprojekt?

    Warum könnt ihr immer nur auf die FAQ verweisen? Klar will man nicht alles immer und immer wieder schreiben - verstehe ich. Aber: Solange die Suche hier nicht geht ist genau der Verweis auf die Suche sehr unfair. Denn die Anleitung steht nicht in der FAQ, sondern wenn überhaupt irgendwo im Forum an sich. Un das durchzusuchen (von Hand) ist unzumutbar.

    Also: Bitte, ich möchte es auch wissen!
    Wie macht man ein Insert oder Update oder Delete mit der Klasse CRecordset?

    @heinz1: Wenn du auch eine auf MySQL spezialisierte Variante gebrauchen kannst, kann ich dir ein Beispielprojekt schicken. Ansonsten kannst du dir ja die Klassen und Anleitungen von Unix-Tom anschauen, genau das nutze ich nämlich.



  • Hi,

    ich habe eine Anwendung mit MySql geschrieben, allerdings ohne ODBC, mit der MySql-C-Api. Falls euch das weiterhilft, dann sagt Bescheid. Da ist Schreiben kein Problem, allerdings ist das Auslesen sehr gewöhnungsbedürftigt.

    Maffe



  • Hallo !!

    Vielen Dank für Deine Unterstützung

    Gerne kannst Du mir Dein Projekt zuschicken: heinz.hemer@t-online.de

    Und sobald ich was Neues weiss meld ich mich bei Dir !

    Heinz

    estartu_de schrieb:

    Jetzt muss ich heinz1 aber mal unterstützen! 😡

    Ich lese seit Monaten mit, in der Hoffnung, dass genau dieses Thema endlich mal beantwortet wird. Ich suche nämlich auch nach Antworten auf exakt diese Fragen.

    Ich hatte sie auch schon mal bekommen, MySQL spezifisch. Aber leider hat sich das DBMS geändert und könnte sich nochmal ändern. Also möchte ich dass jetzt wirklich gerne mit den Klassen der MFC erschlagen.

    @alex-t: Wenn es schon so oft im Forum stand, warum zum Henker (*explodier*) finde ich es nicht? Mit welchen Suchbegiffen findet man die Beträge?
    Achja, ich vergaß: Die Suche ist ja immernoch kaputt. Man findet also hier im Forum nix.
    Wenn du dich noch dran errinnerst, poste doch mal die Links oder hast du vielleicht ein Beispielprojekt?

    Warum könnt ihr immer nur auf die FAQ verweisen? Klar will man nicht alles immer und immer wieder schreiben - verstehe ich. Aber: Solange die Suche hier nicht geht ist genau der Verweis auf die Suche sehr unfair. Denn die Anleitung steht nicht in der FAQ, sondern wenn überhaupt irgendwo im Forum an sich. Un das durchzusuchen (von Hand) ist unzumutbar.

    Also: Bitte, ich möchte es auch wissen!
    Wie macht man ein Insert oder Update oder Delete mit der Klasse CRecordset?

    @heinz1: Wenn du auch eine auf MySQL spezialisierte Variante gebrauchen kannst, kann ich dir ein Beispielprojekt schicken. Ansonsten kannst du dir ja die Klassen und Anleitungen von Unix-Tom anschauen, genau das nutze ich nämlich.



  • Hi,

    nachdem ich vor kurzem auch damit gekämpft habe, hier meine Lösung (Ich verwende zwar nicht mySQL, aber CRecordset, um über ODBC auf eine ACCESS-DB zuzugreifen).

    Um einen neuen Record in die DB einzufügen, verwende ich ein Member eines CRecordset (z.B. hier m_x), die Variablen sField1 und nField2 sind Columns der Table:

    // CRecordset auf Update vorbereiten:
    m_x.AddNew();
    
    //Felder füllen:
    m_x.sField1 = "Irgendwas";
    m_x.nField2 = 112;
    
    //Update/Insert durchführen:
    m_x.Update();
    
    //Close
    m_x.Close();
    

    Hoffe das hilft...

    Gruss

    yeti



  • Auch wenn die Suchfunktion nicht geht ist die FAQ nur 4 Seiten lang. Da braucht man nicht viel suchen.

    http://www.c-plusplus.net/forum/viewtopic.php?t=39098



  • estartu_de schrieb:

    Ich hatte sie auch schon mal bekommen, MySQL spezifisch. Aber leider hat sich das DBMS geändert und könnte sich nochmal ändern. Also möchte ich dass jetzt wirklich gerne mit den Klassen der MFC erschlagen.

    Das RDBMS von MYSQL soll sich geändert haben ?
    Nicht das ich wüsste. Selbst die API hat sich nicht geändert.
    Mein Klassenlib habe ich vor ca. 3 Jahren geschrieben und die Funktioniert immer noch.



  • @Unix-Tom: Nein, nicht MySQL hat sich geändert. Ich muss ein anderes System verwenden. Perversif oder so, ich hab den Namen nicht richtig verstanden und hatte noch nicht die Möglichkeit genauer nachzufragen.

    Ich muss jetzt halt ODBC allein verwenden. Nicht dass ich nochmal umsonst entwickle.



  • @heinz1:

    Kannst Du bitte den TOFU mal unterlassen... erleichtert das Lesen Deiner Beiträge ungemein. Danke!



  • Hallo zusammen !!!

    Mein besonderer Dank gilt estartu_de, ohne deren Hilfe wäre ich noch lange nicht fertig.

    Heinz

    estartu_de schrieb:

    Jetzt muss ich heinz1 aber mal unterstützen! 😡

    Ich lese seit Monaten mit, in der Hoffnung, dass genau dieses Thema endlich mal beantwortet wird. Ich suche nämlich auch nach Antworten auf exakt diese Fragen.

    Ich hatte sie auch schon mal bekommen, MySQL spezifisch. Aber leider hat sich das DBMS geändert und könnte sich nochmal ändern. Also möchte ich dass jetzt wirklich gerne mit den Klassen der MFC erschlagen.

    @alex-t: Wenn es schon so oft im Forum stand, warum zum Henker (*explodier*) finde ich es nicht? Mit welchen Suchbegiffen findet man die Beträge?
    Achja, ich vergaß: Die Suche ist ja immernoch kaputt. Man findet also hier im Forum nix.
    Wenn du dich noch dran errinnerst, poste doch mal die Links oder hast du vielleicht ein Beispielprojekt?

    Warum könnt ihr immer nur auf die FAQ verweisen? Klar will man nicht alles immer und immer wieder schreiben - verstehe ich. Aber: Solange die Suche hier nicht geht ist genau der Verweis auf die Suche sehr unfair. Denn die Anleitung steht nicht in der FAQ, sondern wenn überhaupt irgendwo im Forum an sich. Un das durchzusuchen (von Hand) ist unzumutbar.

    Also: Bitte, ich möchte es auch wissen!
    Wie macht man ein Insert oder Update oder Delete mit der Klasse CRecordset?

    @heinz1: Wenn du auch eine auf MySQL spezialisierte Variante gebrauchen kannst, kann ich dir ein Beispielprojekt schicken. Ansonsten kannst du dir ja die Klassen und Anleitungen von Unix-Tom anschauen, genau das nutze ich nämlich.



  • Tja, nur auf meine Fragen hat sich noch keine Antwort gefunden. 😞

    Die Lösung mit der direkten Übergabe von SQL-Kommandos ist ja angenehm, aber wohl nicht DBMS unabhängig. Dass muss ich aber sein.



  • meinst du persavive? sieht nach einem totschlagwort aus.
    http://www.heise.de/newsticker/data/jk-28.08.02-005/
    http://www.pervasive2004.org/cfp.php

    mit dem mysql/odbc driver kannst du mysql wie odbc anbinden und verwenden.
    vielleicht hilft das.

    so long



  • ps: aber im grunde brauchst du eine abstraktion der db, die daten anfordert in einem bestimmten format, und die jeweiligen öffnungsprozeduren müssen überschrieben werden mit der spezifikation der jeweilig von der speziellen db erforderten öffnungs- und leseprozedur (bzw. schreibprozedur).
    damit hälst du das ganze soweit offen, daß später neue dbs oder was sonst daten liefert angehängt werden können.



  • Danke II, aber irgendwie sieht das nicht nach dem aus, was ich da vermutet hätte. Naja muss ich eh nochmal fragen.

    Aber: Ich habe mein MySQL schon über ODBC angebunden. Mein Problem ist blos die originale Handhabung der Klasse CRecordset.

    Die Lösung von Unix-Tom ist klasse, aber ich glaube, sie ist nicht DBMS unabhängig...

    😞



  • Sie ist zwar nicht Unabhängig aber ich bin dabei eine ODBC-Wrapper zu machen welche die gleichen Methoden exportiert. Man braucht nur die DLL austauschen und der Connect ist anders. Dem Connect bei ODBC übergibt man nur die Datenquelle.
    Ist aber noch Beta.

    Kommt übrigens alles in mein Buch rein.



  • Tja Unix-Tom. Wenn ich aber warte, bis du fertig bist, hat mich mein Chef erschlagen. 😞

    Ausserdem muss es doch irgendwo eine Anleitung für die normalen Datenbankzugriffsklassen der MFC und ihre Handhabung geben, oder?



  • In der MSDN


Anmelden zum Antworten