![]() |
Daten in .txt File schreiben
hallo zusammen,
ich hab hier auch schon mal einen thread aufgemacht wos drum ging ein text file auszulesen.... des klappt jetzt perfekt... bloss jetzt hab ich grad ein problem damit, dass ich keine daten in ein text file schreiben kann :( hintergrund is folgender... ich muss für meinen chef ein 24 mb grosses txt file einlesen und in eine db datei ausgeben... jetzt hab ich aber festgestellt, das in dem txt file das ich einles sätze vorhanden sind die "kaputt" sind und so in meiner insert routine eine exception verursachen... damit ich herrausfinde bei welchen sätzen das passiert wollt ich dann einfach denn sql befehl ausm programm in ein txt file schreiben das ich mir hinterher in ruhe durchlesen kann... der fehler denn ich bekomme lautet: Text File Could Not Read ich hab hier mal des code bsp. aus meinem programm indem ich die db datei erstelle...
Delphi-Quellcode:
procedure TMain_Form.prADDLOGMAT(aErg : Array of String);
var s, sDirec : String; txtFile : TextFile; begin sDirec := '..\Error\Error.txt'; {$I-} AssignFile(txtFile,sDirec); Reset(txtFile); Try With(dbm.LOGMATQuery) Do Begin Application.ProcessMessages; SQL.Clear; s := ('Insert Into DB1.DAT1 (Fld1, Fld2, Fld3, Fld4, Fld5, Fld6, ' +' Fld7, Fld8, Fld9, Fld10, Fld11, Fld12, ' +' Fld13, Fld14, Fld15, Fld16, Fld17, Fld18, ' +' Fld19, Fld20, Fld21, Fld22, Fld23) ' +'Values(''' +aErg[0]+ ''', ''' +aErg[1]+ ''', ''' +aErg[2]+ ''', ' +' ''' +aErg[3]+ ''', ''' +aErg[4]+ ''', ''' +aErg[5]+ ''', ' +' ''' +aErg[6]+ ''', ''' +aErg[7]+ ''', ''' +aErg[8]+ ''', ' +' ''' +aErg[9]+ ''', ''' +aErg[10]+ ''', ''' +aErg[11]+ ''', ' +' ''' +aErg[12]+ ''', ''' +aErg[13]+ ''', ''' +aErg[14]+ ''', ' +' ''' +aErg[15]+ ''', ''' +aErg[16]+ ''', ''' +aErg[17]+ ''', ' +' ''' +aErg[18]+ ''', ''' +aErg[19]+ ''', ''' +aErg[20]+ ''', ' +' ''' +aErg[21]+ ''', ''' +aErg[22]+ ''') '); SQL.Add(s); dbm.DAT1Query.ExecSQL; End; Except s := s + #13; Writeln(txtFile,s); End; CloseFile(txtFile); {$I+} end; hat jemand ne idee was hier falsch läuft... also des txt file is in dem ordner angelegt, das sollte der nicht der grund sein... Edit: hab denn Quellcode bischen editiert damit er leichter zu lesen is! |
Re: Daten in .txt File schreiben
Moin!
Schonmal in der Online-Hilfe nachgesehen? Dort steht unter "Reset": Zitat:
|
Re: Daten in .txt File schreiben
Hallo Andreas,
vielleicht möchtest du deine Prozedur noch etwas verbessern. Der Zweck scheint mir das versuchsweise Einfügen eines Datensatzes in eine Datenbank-Tabelle zu sein - bei Misserfolg das Wegschreiben in eine Protokolldatei. Leider hast du weder das verwendete RDBMS noch die Zugriffskomponenten mitgeteilt. Die Datenbanktabelle scheint mir von einem Tool angelegt worden zu sein. Vermutlich könntest du die Daten auch mit diesem oder einem anderen Tool importieren - ohne eine einzige Zeile Code geschrieben zu haben. Wenn du mit den BDE-Komponenten arbeiten solltest, dann würde dir TBatchMove die Arbeit vielleicht erleichtern. Wenn du aber deinen Weg weiter gehen möchtest, dann besser so:
Delphi-Quellcode:
Import-Fehler entstehen bei deiner Vorgehensweise schon dann, wenn die Daten ein Apostroph enthalten. Bereite die Query-Komponente nur einmal vor und in der Prozedur TryInsertRecord() werden dann einfach nur die Parameterwerte ausgetauscht.
procedure TMainForm.TryInsertRecord(q: TQuery; s: TStrings);
var i: Integer; begin with q do begin for i := 0 to Pred(ParamCount) do Params[i].Value := s[i]; try ExecSql; except Log(s); // end; end; end; Auch die Vorbereitung der Protokoll-Datei mit AssignFile() muss nicht mehrere tausendmal ausgeführt werden. Diesen Code solltest du besser in die aufrufende Prozedur auslagern. Öffnen und Schließen kannst du die Datei in der Prozedur Log() nach folgendem Muster:
Delphi-Quellcode:
Getippt und nicht getestet.
procedure TMainForm.Log(s: TStrings);
begin if FileExists(LogFileName) then Append(LogFile) else Rewrite(LogFile); WriteLn(LogFile, s.CommaText); CloseFile(LogFile); end; Grüße vom marabu |
Re: Daten in .txt File schreiben
danke für eure tipps
@waseo ja das hab ich inzwischen auch gesehen ^^ war mal wieder etwas zu schnell mit dem posten @marabu hier noch die fehlenden information: Delphi Win32 MySQL DB 4.1.19 Zugriff über MySQLDAC Zitat:
mich würde im moment nur interessieren bei welchen sätzen ein fehler vorkommt und woran das liegt... Zitat:
leider hab ich da bis jetzt noch nicht die möglichkeit in diesem tool gefunden daten zu importieren... die anregungen wie ich meine prozedur gestalten kann sind sehr nützlich werds ungefähr so machen:
Delphi-Quellcode:
das assignfile, rewrite, close werd ich in einer anderen prozedur erledigen (wahrschinlich in der Prozedur wo ich mein .txt file einlese)
procedure TMain_Form.prADDLOGMAT(aErg : Array of String, sRow : String);
var s : String; begin Try With(dbm.LOGMATQuery) Do Begin Application.ProcessMessages; SQL.Clear; s := ('Insert Into DB1.DAT1 (Fld1, Fld2, Fld3, Fld4, Fld5, Fld6, ' +' Fld7, Fld8, Fld9, Fld10, Fld11, Fld12, ' +' Fld13, Fld14, Fld15, Fld16, Fld17, Fld18, ' +' Fld19, Fld20, Fld21, Fld22, Fld23) ' +'Values(''' +aErg[0]+ ''', ''' +aErg[1]+ ''', ''' +aErg[2]+ ''', ' +' ''' +aErg[3]+ ''', ''' +aErg[4]+ ''', ''' +aErg[5]+ ''', ' +' ''' +aErg[6]+ ''', ''' +aErg[7]+ ''', ''' +aErg[8]+ ''', ' +' ''' +aErg[9]+ ''', ''' +aErg[10]+ ''', ''' +aErg[11]+ ''', ' +' ''' +aErg[12]+ ''', ''' +aErg[13]+ ''', ''' +aErg[14]+ ''', ' +' ''' +aErg[15]+ ''', ''' +aErg[16]+ ''', ''' +aErg[17]+ ''', ' +' ''' +aErg[18]+ ''', ''' +aErg[19]+ ''', ''' +aErg[20]+ ''', ' +' ''' +aErg[21]+ ''', ''' +aErg[22]+ ''') '); SQL.Add(s); dbm.DAT1Query.ExecSQL; End; Except s := s + #13; Writeln(txtFile,s); End; end; ich denk mal des macht mehr sinn... bzw. ist der richtigere weg??? was meint ihr??? und ich lass mir zusätzlich die denn kompletten satz aus dem .txt file übergeben, dann hab ich noch zusätzlich die daten wie sie ursprünglich waren ohne sql befehle... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz