![]() |
dynamische Threads in while-Schleife
Hallo,
Kann mir einer sagen wie ich Threads in einer while-Schleife erstelle? Lese nacheinander Dateien in einen Ordner aus und das Programm ist sehr langsam. Deswegen wollte ich es mal mit Threads probieren. Wie binde ich das ein und wie setze ich es um? HZab davon keine Ahnung...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; Rec:TSearchRec; m:integer; feld: array of string; begin setlength(feld,strtoint(getconfig('Dateien','Anzahl'))); ////////////////////////////////////////////////////////////////////////// /// /// FIND FILES FUNTION /// ////////////////////////////////////////////////////////////////////////// i:=0; while getconfig('checkboxen',inttostr(i))<>'error' do begin m:=0; if findfirst(getconfig('Allgemein','root')+getconfig('checkboxen',inttostr(i))+'\*.txt',faAnyFile,Rec)<>0 then begin i:=i+1; continue; end; // Übergabe der Namen if (StrCharCount(rec.name,'_')>strtoint(getconfig('Dateien','unique'))-1) and (pos('_',rec.Name)<>1) then begin listbox1.items.add(getconfig('checkboxen',inttostr(i))+'\'+rec.name); query.SQL.Text:='INSERT INTO '+getconfig('SQL','tabelle')+' ('; query2.SQL.Text:='SELECT * FROM '+getconfig('SQL','tabelle')+' WHERE '; while m+1<=strtoint(getconfig('Dateien','Anzahl')) do begin delete(rec.Name,pos('.',rec.Name),4); if m+1=strtoint(getconfig('Dateien','Anzahl')) then feld[m]:=rec.Name else begin feld[m]:=cutrev(rec.Name,'_'); rec.Name:=cut(rec.Name,'_'); end; query.SQL.Text:=query.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+','; query2.SQL.Text:=query2.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+'=:'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+' AND '; query2.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m]; m:=m+1; end; query.SQL.Text:=query.SQL.Text+'zeit,ordner) VALUES ('; m:=0; while m+1<=strtoint(getconfig('Dateien','Anzahl')) do begin query.SQL.Text:=query.SQL.Text+':'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+','; // PARAMETERNAMEN werden geschrieben query.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m]; m:=m+1; end; query.SQL.Text:=query.SQL.Text+':zeit,:ordner)'; query2.SQL.Text:=query2.SQL.Text+'ordner=:ordner'; query.ParamByName('zeit').AsSQLTimeStamp:=DateTimeToSqlTimeStamp(FileDateToDateTime(rec.Time)); query.Parambyname('ordner').Value:=getconfig('checkboxen',inttostr(i)); query2.ParamByName('ordner').Value:=getconfig('checkboxen',inttostr(i)); //showmessage(query2.SQL.Text); query2.Open; //showmessage(inttostr(query2.RecordCount)); if query2.RecordCount=0 then begin //showmessage('in Schleife'); //query.ExecSQL; query.SQL.Clear; end; query2.Close; end; //////////////////////////////////////////////////////////// while findnext(rec)=0 do begin m:=0; /// Übergabe der Namen if (StrCharCount(rec.name,'_')>=strtoint(getconfig('Dateien','unique'))-1) and (pos('_',rec.Name)<>1) then begin listbox1.items.add(getconfig('checkboxen',inttostr(i))+'\'+rec.name); query.SQL.Text:='INSERT INTO '+getconfig('SQL','tabelle')+' ('; query2.SQL.Text:='SELECT * FROM '+getconfig('SQL','tabelle')+' WHERE '; while m+1<=strtoint(getconfig('Dateien','Anzahl')) do //Schleife solange Anzahl in Ini begin delete(rec.Name,pos('.',rec.Name),4); /// löscht .txt if m+1=strtoint(getconfig('Dateien','Anzahl')) then // wenn Felder Anzahl das letzte (also der Name) dann kopieren feld[m]:=rec.Name else begin feld[m]:=cutrev(rec.Name,'_'); /// Dateinamen werden geschnitten und rec.Name:=cut(rec.Name,'_'); /// Feld zugewiesen end; query.SQL.Text:=query.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+','; query2.SQL.Text:=query2.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+'=:'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+' AND '; query2.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m]; m:=m+1; end; query.SQL.Text:=query.SQL.Text+'zeit,ordner) VALUES ('; m:=0; while m+1<=strtoint(getconfig('Dateien','Anzahl')) do begin query.SQL.Text:=query.SQL.Text+':'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+','; // PARAMETERNAMEN werden geschrieben query.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m]; m:=m+1; end; query.SQL.Text:=query.SQL.Text+':zeit,:ordner)'; query2.SQL.Text:=query2.SQL.Text+'ordner=:ordner'; query.ParamByName('zeit').AsSQLTimeStamp:=DateTimeToSqlTimeStamp(FileDateToDateTime(rec.Time)); query.Parambyname('ordner').Value:=getconfig('checkboxen',inttostr(i)); query2.ParamByName('ordner').Value:=getconfig('checkboxen',inttostr(i)); //showmessage(query2.SQL.Text); query2.Open; //showmessage(inttostr(query2.RecordCount)); if query2.RecordCount=0 then begin //showmessage('in Schleife'); //query.ExecSQL; query.SQL.Clear; end; query2.Close; end; //////////////////////// end; i:=i+1; findclose(rec); end; ////////////////////////////////////////////////////////////////////////// /// /// FIND FILES FUNTION ENDE /// ////////////////////////////////////////////////////////////////////////// |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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