通过OnTimer事件来控制啊!
function TfrmServer.WbdlDatabase(TbName,FileName:string):Boolean; //导入数据
var
ListString:TStringList;
ListJL:TStringList;
Str,StrSql:string;
i,j:integer;
limitedpos:integer;
Flag :integer;
begin
if TbName='AssignStatus' then //判断状态表的信息
begin
Qry_tmp.Close;
Qry_tmp.SQL.Clear;
Qry_tmp.SQL.Add('Select Count(*) as Num From AssignStatus');
Qry_tmp.Open;
Flag :=Qry_tmp.FieldByName('Num').AsInteger;
end
else
begin
Flag :=0;
end;
StrSql := 'select * from '+TbName;
Qry_tmp.Close;
Qry_tmp.SQL.Clear;
Qry_tmp.SQL.Add(StrSql);
Qry_tmp.Open;
Result := False;
ListString := TstringList.Create;
ListJL := TStringList.Create;
try
ListString.LoadFromFile(FileName);
for i:=Flag to ListString.Count-1 do //记录行数
begin
str := ListString.Strings;
ListJL.Clear;
while (Pos(',',Str)>0) or (str<>'') do
begin
limitedpos:=Pos(',',str);
if limitedpos <=0 then
begin
ListJL.Add(str);
Str := '';
end
else
begin
ListJL.Add(Copy(Str,1,limitedpos-1));
Str := Copy(Str,Pos(',',Str)+1,Length(Str));
end;
end;
Qry_tmp.Append;
for J :=0 to Qry_tmp.FieldCount-1 do //每行列数
begin
Qry_tmp.Edit;
if Qry_tmp.Fields[j].DataType =ftAutoInc then Continue;
if Qry_tmp.Fields[j].DataType =ftDateTime then
begin
if pos('-',ListJL.Strings[j])>0 then
Qry_tmp.Fields[j].AsString :=trim(ListJL.Strings[j])
else
begin
if LIstJL.Strings[j]<>'' then
begin
ListJL.Strings[j] := Copy(ListJL.Strings[j],1,4)+'-'+Copy(ListJL.Strings[j],5,2)+'-'+Copy(ListJL.Strings[j],7,2);
Qry_tmp.Fields[j].AsString := trim(ListJL.Strings[j]);
end;
end;
end
else
begin
if Qry_tmp.Fields[j].DataType =ftInteger then
begin
Qry_tmp.Fields[j].AsInteger :=StrToInt(ListJL.Strings[j]);
end;
if Qry_tmp.Fields[j].DataType =ftBoolean then
begin
if (ListJL.Strings[j] ='0') or (ListJL.Strings[j] = 'False') then
Qry_tmp.Fields[j].AsBoolean :=False
else
begin
if (ListJL.Strings[j] ='1') or (ListJL.Strings[j] = 'True') then
Qry_tmp.Fields[j].AsBoolean := True;
end;
end
else
if ListJL.Strings[j]<>'' then
begin
{if StrToInt(trim(ListJL.Strings[0])) <= Flag then
begin
ii :=Flag + 1;
break; //如果取到的最后行标志相同,指针下移
end
else
begin }
Qry_tmp.Fields[j].AsString := trim(ListJL.Strings[j]);
//Qry_tmp.Post;
// end;
end;
end;
end;
Qry_tmp.Post();
end;
Result := True;
except on e:Exception do
begin
ShowMessage(e.Message);
Application.Terminate;
end;
end;
end;
调用:
procedure TfrmServer.Timer1Timer(Sender: TObject);
var
fileName :string; //路径下文件名
begin
//效率表
fileName :=ExtractFilePath(Application.ExeName)+'MData/E_'+DateToStr(now)+'.zd';
if not FileExists(fileName) then
begin
ShowMessage('文件不存在!');
end
else
begin
if Readini then
begin
try
if (Wbdldatabase('AssignEfficiency',fileName)) then
begin
// ShowMessage('数据发送成功!');
end
else
begin
// ShowMessage('数据发送失败!');
// Abort;
end;
except on e:Exception do
begin
ShowMessage(e.Message);
end;
end;
end
else
begin
ShowMessage('数据库连接失败!');
Application.Terminate;
end;
end;