问下,动态创建的adoquery,异步获取数据的进度ProgressBar1.Position:=Progress;//要写在哪儿啊?

解决方案 »

  1.   

    还是没人答??控制面板拉过来的可视化的好办,直接写在adoquery1.OnFetchProgress,可是动态创建的怎么办啊??
      

  2.   

    你的动态是指什么?
    如果是要在数据库刚打开的时候,那么把代码写在ADOQuery的OnOpen应该就可以了!
    如果是要修改数据库时就要改变,那只能把代码写在每次修改数据的后面
      

  3.   

    一样啊,不管怎么创建的它也是事件驱动的呀,比如ado1是动态创建的,那就写
    ado1.OnFetchProgress:=MyFetchProgressEvent;
    MyFetchProgressEvent就是你自己的处理过程,参数要和标准的FetchProgress事件处理过程一致,写在Published段
      

  4.   

    动态创建控件的吗?

    adoquery1:=tadoquery.create(self);
    adoquery1.OnFetchProgress:=myfunction(); //把控件事件指向自己的函数

    ///然后找个地方写函数
      

  5.   

    adoquery1:=tadoquery.create(self);
    ......
     
      

  6.   

    先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;