Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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();

}

}

Geschrieben
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

Geschrieben
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?

Geschrieben

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]

Geschrieben
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.
Geschrieben
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:

Geschrieben
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.
Geschrieben
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

Geschrieben

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.

Geschrieben
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:

Geschrieben
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

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...