|
Registriert seit: 19. Apr 2006 40 Beiträge |
#1
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 /// ////////////////////////////////////////////////////////////////////////// |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |