Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

}

}

  • Autor
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

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?

  • Autor

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]

GetFirst() GetNext()?!?! vielleicht

kann ich mir vorstellen. :P des beinhaltet eine unserer Odbc-Klasse. hab da wohl was verwechselt aber vielleicht gibts des ja so auch

  • Autor
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:

  • Autor
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

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.

  • Autor
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:

  • Autor
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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.