Assignfile(F,FileName); Reset(F); while not Eof(f) do begin Readln(F,FileItem); AnalyzeDir(FileItem); with ADOCommand do begin CommandText:='insert into allml(name,time,ip)' +'values (:name,:time,:ip)'; Parameters.ParamByName('name').Value :=name; Parameters.ParamByName('time').Value :=time; Parameters.ParamByName('ip').Value :=ip; execute//每增加一条记录,都execute一次,请问有没有批处理的方法,我用的是ADO控件。 end; end; end
Assignfile(F,FileName); Reset(F); while not Eof(f) do begin Readln(F,FileItem); AnalyzeDir(FileItem); with ADOCommand do begin CommandText:='insert into allml(name,time,ip)' +'values (:name,:time,:ip)'; Parameters.ParamByName('name').Value :=name; Parameters.ParamByName('time').Value :=time; Parameters.ParamByName('ip').Value :=ip; execute//每增加一条记录,都execute一次,请问有没有批处理的方法,我用的是ADO控件。 end; end; end 我刚刚试了用多线程直接添加到数据库,有数据丢失, 所以在execute后,我加了sleep(50); 就可以,不过效率应该降了很多。
Reset(F);
while not Eof(f) do
begin
Readln(F,FileItem);
AnalyzeDir(FileItem);
with ADOCommand do
begin
CommandText:='insert into allml(name,time,ip)'
+'values (:name,:time,:ip)';
Parameters.ParamByName('name').Value :=name;
Parameters.ParamByName('time').Value :=time;
Parameters.ParamByName('ip').Value :=ip;
execute//每增加一条记录,都execute一次,请问有没有批处理的方法,我用的是ADO控件。
end;
end;
end
Reset(F);
while not Eof(f) do
begin
Readln(F,FileItem);
AnalyzeDir(FileItem);
with ADOCommand do
begin
CommandText:='insert into allml(name,time,ip)'
+'values (:name,:time,:ip)';
Parameters.ParamByName('name').Value :=name;
Parameters.ParamByName('time').Value :=time;
Parameters.ParamByName('ip').Value :=ip;
execute//每增加一条记录,都execute一次,请问有没有批处理的方法,我用的是ADO控件。
end;
end;
end
我刚刚试了用多线程直接添加到数据库,有数据丢失,
所以在execute后,我加了sleep(50);
就可以,不过效率应该降了很多。
不过,我认为你最好用队列来实现它,具体的做法是:维护一个队列和一个信号量。A,B,C,D线程每生成一个文件,就加到队列里去,同时信号量加一。E线程阻塞等待信号量,有信号量时,信号量先减一,取队列数据,然后处理相应的工作。做完后继续阻塞等待信号量的发生。