我从本地机器上向远程服务器导入csv文件,由于使用ado结合query,文件较大,导入速度较慢,我想制作一个进度条用以向用户显示当前的导入进度,请问要怎么样用delphi制作这个进度条。(当我点击“导入”按钮时,可以弹出新的窗体也可以是在当前窗体显示进度也可以),有没有具体的代码示范,谢谢。

解决方案 »

  1.   

    首先你知道有多少条数据,然后逐条insert或其他,这样不就可以知道进度了吗
      

  2.   

    如果是数据导入用ProgressBar,先统计总记录数,在导入按扭,每导入1笔数据让Position+1,即
    ProgressBar1.Max:=总记录数;
    ProgressBar1.Position:=ProgressBar1.Position+1;如果是拷贝文件,用Animate
    Animate1.CommonAVI:=aviCopyFiles;
    Animate1.Active:=True;
      

  3.   

    我的导入语句是这样写的,但我没用过进度条,不会用。while not ADOQ_dr.Eof  do
    begin
      sqlStr1:='insert into '+tmpTbName1+'(ysdbh,ysdmc,ysdje,cgjgmc,zdr,zdsj,wtgyy,bz,zt,dyl) values (';
      for i:= 0 to  ADOQ_dr.Fields.Count- 1 do
      begin
        if ADOQ_dr.Fields[i].Value<>null then
          tbData1:=ADOQ_dr.Fields[i].Value
        else tbData1:='';
        sqlStr1:=sqlStr1+''''+tbData1+''''+',';
      end;
      delete(sqlStr1,length(sqlStr1),1);
      sqlStr1:=sqlStr1+')';
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add(sqlStr1);
      try
        Query1.ExecSQL;
      except
        application.MessageBox('数据导入失败(错误:4)!','信息提示',mb_ok);
        exit;
      end;
      ADOQ_dr.Next;
    end;
      

  4.   

    拉一下ProgressBar控件下來,改这个地方:ProgressBar1.Max:=ADOQ_dr.RecordCount;
    while not ADOQ_dr.Eof  do
    begin
      ProgressBar1.Position:=ProgressBar1.Position+1;
    ...
      

  5.   

    我有两个while not ADOQ_dr.Eof  do,因为我导入了两个csv文件,但我只想总共显示一条进度条。