先adoquery1:=tadoquery.create(self)後再free,再把進度條的代碼寫在相應的事件裡面:以下給你參考的demo:procedure TRes_Hr_BKD_F.cxButton1Click(Sender: TObject); var iLoop,Rownos:Integer; begin inherited; if (Trim(cbb_cb.Text)<>'') and (Trim(cbb_kb.Text)<>'') and (Trim(cbb_zxb.Text)<>'') and (Trim(cxdt.Text)<>'') and (Trim(cxImageComboBox1.Text)<>'') and (Trim(cxDateEdit1.Text)<>'') and (Trim(cxDateEdit2.Text)<>'') and (Trim(cxTimeEdit1.Text)<>'') and (Trim(cxTextEdit1.Text)<>'') then begin if qry_HrBk.RecordCount>0 then begin if MessageDlg('操作詢問(“人事補卡”):你確定要對這些人事資料數據進行補卡動作嗎?',mtConfirmation,[mbYes,mbNo],0)=idyes then begin if not qry_HrBk.FieldByName('BKCheck').AsBoolean then begin MessageDlg('操作提示:請勾選要補卡的人員記錄數據!',mtWarning,[mbOK],0); Exit; end; Application.ProcessMessages; ProgressBar1.Min:=0; ProgressBar1.Max:=qry_HrBk.RecordCount; qry_HrBk.First; Rownos:=qry_HrBk.RecNo; for iLoop:=0 to qry_HrBk.RecordCount -1 do begin ProgressBar1.Position:=ProgressBar1.Position+1; Application.ProcessMessages; if qry_HrBk.FieldByName('BKCheck').AsBoolean then begin if (cxdt.Date>TnowDt) then begin qry_getop.Close; qry_getop.SQL.Text:=' select * from RES_HR_RSBK where ACCOUNT_ID='''+ Trim(qry_HrBk.FieldByName('Account_Id').AsString)+''' and SQRQ='''+ FormatDateTime('yyyy/mm/dd',cxdt.Date)+''' and BKZL='''+ IntToStr(cxImageComboBox1.ItemIndex)+''' '; qry_getop.Open; if (qry_getop.RecordCount >0) then begin qry_HrBk.Edit; qry_HrBk.FieldByName('BKCheck').AsBoolean:=False; qry_HrBk.Next; Continue; end; end; try //插入補卡數據 qry_spbkd.Close; qry_spbkd.SQL.Clear; qry_spbkd.SQL.Add( ' exec SP_MES_HRBKD '+quotedstr(FormatDateTime('yyyy/mm/dd',cxdt.Date))+','+quotedstr(Trim(qry_HrBk.fieldbyname('Account_Id').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('Full_Name').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('CB').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('BM').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('BMID').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('KB').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('PARTID').AsString))+','+ quotedstr(Trim(qry_HrBk.fieldbyname('XB').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('BC').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('CBZX').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('ZJQF').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('ZW').AsString))+','+quotedstr(FormatDateTime('yyyy/mm/dd',qry_HrBk.fieldbyname('JCRQ').AsDateTime))+','+quotedstr(Trim(qry_HrBk.fieldbyname('JN').AsString))+','+quotedstr(trim(inttostr(cxImageComboBox1.ItemIndex)))+','+ quotedstr(FormatDateTime('yyyy/mm/dd',cxDateEdit1.Date))+','+quotedstr(FormatDateTime('yyyy/mm/dd',cxDateEdit2.Date))+','+quotedstr(FormatDateTime('hh:mm',cxTimeEdit1.Time))+','+ quotedstr(Trim(cxTextEdit1.Text))); qry_spbkd.ExecSQL; qry_HrBk.Edit; qry_HrBk.FieldByName('BKCheck').AsBoolean:=False; except qry_HrBk.Edit; qry_HrBk.FieldByName('BKCheck').AsBoolean:=False; qry_HrBk.Next; Continue; end; end; qry_HrBk.Next; end; qry_HrBk.RecNo:=Rownos; ProgressBar1.Position:=0; cbb_cb.Clear; cbb_kb.Clear; cbb_zxb.Clear; cbb_gh.Clear; cxdt.Clear; cxImageComboBox1.Clear; cxDateEdit1.Clear; cxDateEdit2.Clear; cxTimeEdit1.Clear; cxTextEdit1.Clear; cbb_cb.SetFocus; end else Abort; end; end else MessageDlg('操作提示:請確認補卡信息是否填寫完整或是否為空!',mtWarning,[mbOK],0); Exit; end;
如果是要在数据库刚打开的时候,那么把代码写在ADOQuery的OnOpen应该就可以了!
如果是要修改数据库时就要改变,那只能把代码写在每次修改数据的后面
ado1.OnFetchProgress:=MyFetchProgressEvent;
MyFetchProgressEvent就是你自己的处理过程,参数要和标准的FetchProgress事件处理过程一致,写在Published段
。
adoquery1:=tadoquery.create(self);
adoquery1.OnFetchProgress:=myfunction(); //把控件事件指向自己的函数
。
///然后找个地方写函数
......
var
iLoop,Rownos:Integer;
begin
inherited;
if (Trim(cbb_cb.Text)<>'') and
(Trim(cbb_kb.Text)<>'') and
(Trim(cbb_zxb.Text)<>'') and
(Trim(cxdt.Text)<>'') and
(Trim(cxImageComboBox1.Text)<>'') and
(Trim(cxDateEdit1.Text)<>'') and
(Trim(cxDateEdit2.Text)<>'') and
(Trim(cxTimeEdit1.Text)<>'') and
(Trim(cxTextEdit1.Text)<>'') then
begin
if qry_HrBk.RecordCount>0 then
begin
if MessageDlg('操作詢問(“人事補卡”):你確定要對這些人事資料數據進行補卡動作嗎?',mtConfirmation,[mbYes,mbNo],0)=idyes then
begin
if not qry_HrBk.FieldByName('BKCheck').AsBoolean then
begin
MessageDlg('操作提示:請勾選要補卡的人員記錄數據!',mtWarning,[mbOK],0);
Exit;
end;
Application.ProcessMessages;
ProgressBar1.Min:=0;
ProgressBar1.Max:=qry_HrBk.RecordCount;
qry_HrBk.First;
Rownos:=qry_HrBk.RecNo;
for iLoop:=0 to qry_HrBk.RecordCount -1 do
begin
ProgressBar1.Position:=ProgressBar1.Position+1;
Application.ProcessMessages;
if qry_HrBk.FieldByName('BKCheck').AsBoolean then
begin
if (cxdt.Date>TnowDt) then
begin
qry_getop.Close;
qry_getop.SQL.Text:=' select * from RES_HR_RSBK where ACCOUNT_ID='''+ Trim(qry_HrBk.FieldByName('Account_Id').AsString)+''' and SQRQ='''+ FormatDateTime('yyyy/mm/dd',cxdt.Date)+''' and BKZL='''+ IntToStr(cxImageComboBox1.ItemIndex)+''' ';
qry_getop.Open;
if (qry_getop.RecordCount >0) then
begin
qry_HrBk.Edit;
qry_HrBk.FieldByName('BKCheck').AsBoolean:=False;
qry_HrBk.Next;
Continue;
end;
end;
try
//插入補卡數據
qry_spbkd.Close;
qry_spbkd.SQL.Clear;
qry_spbkd.SQL.Add( ' exec SP_MES_HRBKD '+quotedstr(FormatDateTime('yyyy/mm/dd',cxdt.Date))+','+quotedstr(Trim(qry_HrBk.fieldbyname('Account_Id').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('Full_Name').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('CB').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('BM').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('BMID').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('KB').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('PARTID').AsString))+','+
quotedstr(Trim(qry_HrBk.fieldbyname('XB').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('BC').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('CBZX').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('ZJQF').AsString))+','+quotedstr(Trim(qry_HrBk.fieldbyname('ZW').AsString))+','+quotedstr(FormatDateTime('yyyy/mm/dd',qry_HrBk.fieldbyname('JCRQ').AsDateTime))+','+quotedstr(Trim(qry_HrBk.fieldbyname('JN').AsString))+','+quotedstr(trim(inttostr(cxImageComboBox1.ItemIndex)))+','+
quotedstr(FormatDateTime('yyyy/mm/dd',cxDateEdit1.Date))+','+quotedstr(FormatDateTime('yyyy/mm/dd',cxDateEdit2.Date))+','+quotedstr(FormatDateTime('hh:mm',cxTimeEdit1.Time))+','+
quotedstr(Trim(cxTextEdit1.Text)));
qry_spbkd.ExecSQL;
qry_HrBk.Edit;
qry_HrBk.FieldByName('BKCheck').AsBoolean:=False;
except
qry_HrBk.Edit;
qry_HrBk.FieldByName('BKCheck').AsBoolean:=False;
qry_HrBk.Next;
Continue;
end;
end;
qry_HrBk.Next;
end;
qry_HrBk.RecNo:=Rownos;
ProgressBar1.Position:=0;
cbb_cb.Clear;
cbb_kb.Clear;
cbb_zxb.Clear;
cbb_gh.Clear;
cxdt.Clear;
cxImageComboBox1.Clear;
cxDateEdit1.Clear;
cxDateEdit2.Clear;
cxTimeEdit1.Clear;
cxTextEdit1.Clear;
cbb_cb.SetFocus;
end else
Abort;
end;
end else
MessageDlg('操作提示:請確認補卡信息是否填寫完整或是否為空!',mtWarning,[mbOK],0);
Exit;
end;