Registriert seit: 19. Apr 2006
40 Beiträge
|
dynamische Threads in while-Schleife
7. Jun 2006, 07:10
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
///
//////////////////////////////////////////////////////////////////////////
|