bigpoint Geschrieben 18. Oktober 2002 Geschrieben 18. Oktober 2002 Ich habe ein progi der aus eine Textdatei Daten auslest und in DB die speichern soll ;-) So weit so gut, ich habe eine Klass Datenbank wo ich den zugriff sowie schreiben und schlissen von DB mache, eine Klasse wo ich die Datei auslese und dann sollte ich es in DB laden können, leider kreige ich keinen Fehler aber es pasiert auch nichts ;-(( so mache ich es try{ daten->OpenDB(); daten->Write(); daten->CloseDB(); } catch(CDBException* pe) { pe->Delete(); } so sollte es in DB geladen werden void CDatenbank::Write( ) { CTxt* ptxt = new CTxt; sExecute.Format("INSERT INTO VERSREST VALUES(%s','%s','%s','%s','%s','%s','%s','%s')", ptxt->strkv,ptxt->strmatchkd,ptxt->strlanderkz,ptxt->strbeendigunggr,ptxt->strverstat,ptxt->strpflegestufe ,ptxt->strkenkom,ptxt->strpflegab,ptxt->strkgeld); try { cdrestdat.ExecuteSQL(sExecute); } catch(CDBException* pe) { pe->Delete(); } } Zitieren
Hexagon Geschrieben 18. Oktober 2002 Geschrieben 18. Oktober 2002 try & catch is ja schonmal nicht schlecht, aber dann einfach löschen? Laß sie dir doch mal vorher anzeigen! Zitieren
Hexagon Geschrieben 18. Oktober 2002 Geschrieben 18. Oktober 2002 BTW: Was ist mit einem commit()?:eek: Zitieren
bigpoint Geschrieben 18. Oktober 2002 Autor Geschrieben 18. Oktober 2002 Original geschrieben von Hexagon BTW: Was ist mit einem commit()?:eek: commit() -> was ist das ?? Zitieren
bigpoint Geschrieben 18. Oktober 2002 Autor Geschrieben 18. Oktober 2002 Original geschrieben von Hexagon try & catch is ja schonmal nicht schlecht, aber dann einfach löschen? Laß sie dir doch mal vorher anzeigen! moment wie einfach löschen ?? Zu erst öffne ich DB, dann schreibe ich in DB und dann schließe ich DB Zitieren
Klotzkopp Geschrieben 18. Oktober 2002 Geschrieben 18. Oktober 2002 Original geschrieben von 007ski moment wie einfach löschen ?? Hexagon meint die Exception. Die löschst Du einfach, obwohl sie wertvolle Informationen liefern könnte, warum der Datenbankzugriff nicht funktioniert hat. Aber zum eigentlichen Problem: Ich denke, ein zusätzliches Hochkomma zwischen VALUES( und dem ersten %s könnte auch schon helfen. Noch was: Füllt der Konstruktor von CTxt die Member mit gültigen Daten? Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 Also, daß mit dem laden in DB habe ich schon hingekriegt oder fast ;-( Es ist so ich habe eine Methode : bool CTxt::GetTxt() { LesenDatei.Open( "E:\\test.txt", CFile::modeRead,NULL ); RestDatei.Open("test1.txt", CFile::modeWrite | CFile::modeCreate,NULL ); try { while( LesenDatei.Read( sDummy, 220 ) ) { strZeile = sDummy; strkv = strZeile.Mid( 8, 11);//KV-Nummer strd = strZeile.Mid( 19, 2);//Geschlecht strkz = strZeile.Mid( 21, 2);//Satzzähler strgr = strZeile.Mid( 23, 5);//Landesgeschäftsstelle . . strrest.Format("%s%s%s%s%s%s%s%s%s",strkv,strd,strkz,strgr.....“); RestDatei.WriteString("10\t"+strrest+"\n"); } }catch (CFileException* fe) { cout<<"Die angegebene Pfade sind falsch"<<fe<<endl; } cout<<"Die Textdateien sind erfolgreich bearbeitet ;-))\n"; LesenDatei.Close(); RestDatei.Close(); return TRUE; } die lies eine Textdatei und schreib in eine neue -> funk auch sehr gut, jetz will ich die Daten von strrest in DB speichern, daß tue ich in andere Methode : void CDatenbank::Write( ) { CTxt* ptxt = new CTxt; ptxt->GetTxt(); ptxt->strrest.Format("INSERT INTO VERSREST VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s')", ptxt->strkv,ptxt->strkd,ptxt->strkz.........); try { if(cdrestdat.Open("test")){ cdrestdat.ExecuteSQL(ptxt->strrest); cdrestdat.Close(); } cout<<"Die Daten sind erforgleich in DB geladen"<<endl; } catch(CDBException* pe) { cout<<"Fehler beim laden von Daten"<<pe<<endl; pe->Delete(); } } und es wird nur das letzte Datensatz in DB gespeichert ;-((( [Anm.: Smilies deaktiviert | Klotzkopp] Zitieren
-camper-cleo Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 GetFirst() GetNext()?!?! vielleicht Zitieren
Klotzkopp Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Original geschrieben von 007ski ... und es wird nur das letzte Datensatz in DB gespeichert ;-(((Wundert mich nicht. Nachdem GetTxt ausgeführt wurde, steht in den Variablen von pTxt der letzte Datensatz. Und Du machst nur ein INSERT. Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 Original geschrieben von [camper]cleo GetFirst() GetNext()?!?! vielleicht GetFirst() kenne ich nicht ? und GetNext() hm.... keine Ahnung Zitieren
-camper-cleo Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 kann ich mir vorstellen. des beinhaltet eine unserer Odbc-Klasse. hab da wohl was verwechselt aber vielleicht gibts des ja so auch Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 Original geschrieben von Klotzkopp Wundert mich nicht. Nachdem GetTxt ausgeführt wurde, steht in den Variablen von pTxt der letzte Datensatz. Und Du machst nur ein INSERT. Ja ich hoffe aber, dass Du damit nicht sagen willst das ich jetzt 1000 mal insert schreiben muss :eek: Zitieren
Klotzkopp Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Original geschrieben von 007ski Ja ich hoffe aber, dass Du damit nicht sagen willst das ich jetzt 1000 mal insert schreiben muss :eek: Nein, aber der ganze Code mit Format und ExecuteSQL muss in die Schleife in GetTxt. Du musst also Deinen Code umstellen. Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 Original geschrieben von Klotzkopp Nein, aber der ganze Code mit Format und ExecuteSQL muss in die Schleife in GetTxt. Du musst also Deinen Code umstellen. Ja schon klaro ;-) habe auch probiert und zwar so: while(ptxt->GetTxt()) { . . . . . . } aber es funk nicht Zitieren
Klotzkopp Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Das Problem ist: Wenn Du einmal GetTxt aufrufst, dann bist Du schon alle Datensätze durchgegangen. Es bringt also nichts, wenn Du die Art des Aufrufs von GetTxt änderst. Du musst den Code umstellen. Entweder muss die Schleife aus GetTxt raus, oder der Datenbankcode muss in diese Schleife rein. Letzteres dürfte einfacher sein. Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 Original geschrieben von Klotzkopp ....oder der Datenbankcode muss in diese Schleife rein. Letzteres dürfte einfacher sein. habe auch gedacht und die ptxt->strrest.Format("INSERT INTO VERSREST VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s ')", ptxt->strkv,ptxt->strkd,ptxt->strkz.........); in die Ctext Datei rein in die while schleife geschrieben – hilft leider nichts dh. immer den letzen Datensatz wird gespeichert :confused: Zitieren
Klotzkopp Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Die Format-Anweisung ist natürlich wichtig, aber die schreibt noch nichts in die Datenbank. Die ExecuteSQL-Anweisung muss auch in die Schleife. Erst da wird wirklich eingefügt. Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 Original geschrieben von Klotzkopp ....Entweder muss die Schleife aus GetTxt raus...... Ja das natürlich funk wie kann ich aber machen, daß ich das ganze doch in andere Methode bearbeiten kann ohne in die Methode noch mal die Text Datei zu öffnen Zitieren
Klotzkopp Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Original geschrieben von 007ski Ja das natürlich funk wie kann ich aber machen, daß ich das ganze doch in andere Methode bearbeiten kann ohne in die Methode noch mal die Text Datei zu öffnen Nur in GetText hast Du die Daten zur Verfügung. Wenn Du sie dort nicht in der Datenbank ablegen willst, dann muss dein Programm alle Datensätze in Variablen zwischenspeichern. Je nachdem, wie wiele Daten das sind, ist das eher eine schlechte Lösung. Zitieren
bigpoint Geschrieben 22. Oktober 2002 Autor Geschrieben 22. Oktober 2002 OK also merci, vielleicht öffne ich noch mal die Datei in eine andere Methode und dann ..... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.