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(); } }
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!
Hexagon Geschrieben 18. Oktober 2002 Geschrieben 18. Oktober 2002 BTW: Was ist mit einem commit()?:eek:
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 ??
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
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?
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]
-camper-cleo Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 GetFirst() GetNext()?!?! vielleicht
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.
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
-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
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:
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.
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
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.
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:
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.
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
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.
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 .....
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden