AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Txt File inhalt in DB speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Txt File inhalt in DB speichern

Ein Thema von domsch · begonnen am 21. Jun 2006 · letzter Beitrag vom 21. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
domsch

Registriert seit: 15. Apr 2006
Ort: Paderborn
21 Beiträge
 
Delphi 2006 Enterprise
 
#1

Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:17
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
Moin,

ich hab da son problem...

ich hab 624 Txt Dateien dessen Inhalt in eine DB müssen..

Da die DB zu einem Programm gehört das auch wo anders genutzt werden kann gibt ne kleine Installationsanleiung und ich wollte ein kleines tool dazu packen, das das mit den txt dateien einlesen automatisch macht...

Habe bissel hier rumgestöpert und bin zu folgendem lösungansatz gekommen...

Das Tool hat einen Button zum öffnen des Ordners wo die 624 Datein drin liegen, diese sollen dann nach und nach geöffnet werden, entsprechend ihrem dateinamen in die DB eingepflegt werden und die nächste datei genommen werden..


so sieht es bisher aus:

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
  anzahl:Integer;
  error: integer;
  sr: tSearchrec;
  pfad: string;
  dateiname: string;
  id:string;
begin


 Command.Connection:= DatenbankConnection.DataModule1.Connection;
  anzahl:=0;

  if OpenDialog.Execute then
  begin

  pfad := OpenDialog.FileName;
  id:= extractFileName(pfad);

  id:= Copy(id, 0, pos('.txt', id)-1);

  id:= IntToStr(StrToInt(id));
  pfad := Copy(pfad, 0, pos('.txt', OpenDialog.FileName)-5);

  error := FindFirst(pfad + '*.txt', faAnyfile, sr);
  while error = 0 do
  begin
    memo1.Lines.Clear;
    anzahl:=anzahl+1;
    dateiname := pfad + sr.name;
    label1.Caption:=IntToStr(anzahl);
    Memo1.Lines.LoadFromFile(dateiname);
     //IN DB SChreiben
     with command do
     begin
        CommandText:='';

        CommandText:='UPDATE Tabelle SET Daten = '
                  +QuotedStr(Memo1.Text) + 'WHERE ID = '
                  +QuotedStr(id);

        execute;
     end;
     sleep(500);
    error := FindNext(sr);
  end;
  FindClose(sr);

  end;
end;
das Memo Feld ist nur für mich zum gucken da ob das file geladen wird...
das label soll mir nur anzeigen welche durchlauf dran ist..

sleep benutz ich, da ich nach ersten versuchen vermutet hatte, das das Programm alles zuschnell abarbeitet für die DB

das komische ist das ein paar einträge gemacht werden, mal sind es 96, mal sind es 3, dann wieder 50 usw.. aber nie alle 624...

Kann mir wer auf die sprünge helfen?

Gruß
Dominik
Absoluter Delphi Newbie
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:25
du fügst die dateien zu deiner db nur hinzu wenn dein error = 0 ist

kontrollier mal ob der wirklich immer auf 0 ist, könnt ja sein das du irgendwo nen fehler beim file laden bekommst
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
domsch

Registriert seit: 15. Apr 2006
Ort: Paderborn
21 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:27
Im Memofeld ändert sich der Inhalt ja ständig..also geh ich davon aus das das Laden klappt...aber prüfen werd ich es trotzdem mal
Dominik
Absoluter Delphi Newbie
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:36
wenn ich es so auf die schnelle richtig gesehen hab, dann tust du denn inhalt von deinem memo feld immer dann ändern wenn du ein file hast laden können, also wenn error = 0 ist...


kannst ja einfach mal folgendes probieren nach FindNext:

Delphi-Quellcode:
error := FindNext(sr);

If error <> 0 Then
Begin
  ShowMessage('Fehler beim Lesen der Datei: ' + sr.Name);
End;
dann siehst wahrscheinlich recht schnell ob nen fehler manchmal kriegst oder net
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
domsch

Registriert seit: 15. Apr 2006
Ort: Paderborn
21 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:47
Zitat von Andidreas:

kannst ja einfach mal folgendes probieren nach FindNext:

Delphi-Quellcode:
error := FindNext(sr);

If error <> 0 Then
Begin
  ShowMessage('Fehler beim Lesen der Datei: ' + sr.Name);
End;
habe ich mal gemacht, außer nach dem letzten file kommt keine Fehlermeldung!
Dominik
Absoluter Delphi Newbie
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:50
kannst du kontrollieren ob dein SQL befehl nen fehler bringt?

also z.B. mit Try und Except
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
domsch

Registriert seit: 15. Apr 2006
Ort: Paderborn
21 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 08:57
Yos sicher kann ich das machen..


Delphi-Quellcode:
       try
          execute;
       except on E:exception do
          showmessage(e.Message);
       end;
da ich aber eh die ganze zeit im Debugger Modus teste, würd mir der Debugger ja die Exceptions anzeigen, aber auch hier scheind alles zupassen.
Dominik
Absoluter Delphi Newbie
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 09:03
hmmm dann hab ich so langsam auch keine idee mehr was noch schief laufen könnte,
werds mir nachher nommel in ruhe ankucken...
vielleicht findet bis dahin au jemand anders scho was...
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 09:16
Hallo Dominik.

Fehler entstehen bei der gezeigten Vorgehensweise zwangsläufig, wenn der Inhalt der Dateien mehrzeilig ist. Das aufnehmende Tabellenfeld ist doch bestimmt ein TMemoField? Dann würde ich es so probieren:

Delphi-Quellcode:
begin
  // ...
  error := FindFirst(pfad + '*.txt', faAnyfile, sr);
  while error = 0 do
  begin
    Inc(anzahl);
    dateiname := pfad + sr.name;
    id := ...; // damit du nicht immer den gleichen Datensatz änderst
    // label1.Caption := IntToStr(anzahl);
    // Memo1.Lines.LoadFromFile(dateiname);
    with command do
    begin
      CommandText := 'UPDATE Tabelle SET Daten = :text WHERE Id = :id';
      Parameters.ParamByName('text').LoadFromFile(dateiname);
      // Parameters.ParamByName().AsInteger := id; // ohne Parametername geht es nicht
      Parameters.ParamByName('id').AsInteger := id;
      Execute;
    end;
    error := FindNext(sr);
  end;
  FindClose(sr);
end;
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
domsch

Registriert seit: 15. Apr 2006
Ort: Paderborn
21 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Txt File inhalt in DB speichern

  Alt 21. Jun 2006, 09:56
Zitat von marabu:
Hallo Dominik.

Fehler enstehen bei der gezeigten Vorgehensweise zwangsläufig, wenn der Inhalt der Dateien mehrzeilig ist. Das aufnehmende Tabellenfeld ist doch bestimmt ein TMemoField? Dann würde ich es so probieren:

Delphi-Quellcode:
begin
  // ...
  error := FindFirst(pfad + '*.txt', faAnyfile, sr);
  while error = 0 do
  begin
    Inc(anzahl);
    dateiname := pfad + sr.name;
    id := ...; // damit du nicht immer den gleichen Datensatz änderst
    // label1.Caption := IntToStr(anzahl);
    // Memo1.Lines.LoadFromFile(dateiname);
    with command do
    begin
      CommandText := 'UPDATE Tabelle SET Daten = :text WHERE Id = :id';
      Parameters.ParamByName('text').LoadFromFile(dateiname);
      Parameters.ParamByName().AsInteger := id;
      Execute;
    end;
    error := FindNext(sr);
  end;
  FindClose(sr);
end;
Getippt und nicht getestet.

Grüße vom marabu
HI marabu

das Feld in der DB ist ein "Text" Feld. Is bei MSSQL für große Textmengen...
Bei den paar Versuchen wo die Daten in die DB geschrieben werden, sind die Daten auch mehrzeilig und ich kann sie auch so wieder rausholen.

Das mit den Parametern geht leider nicht,

Delphi-Quellcode:
 
[Pascal Fehler] Unit1.pas(82): E2035 Nicht genügend wirkliche Parameter
da ich leider so gar keine Ahnung von Paramentern habe, kann ich mit der Fehlermeldung nix anfangen
Dominik
Absoluter Delphi Newbie
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz