我用ADOQUERY从网上SQL服务器上下载数据到本地机上的SQL服务器上,用了同样的语句但在不同的两个程序中得到的结果却是截然不同的两个结果,一个程序下载2000条记录用时7分多钟,而另一个下载却只有不到1分钟的时间。
    我同时使用了另一窗口中的进度条,在前一个程序中只看到进度条所在窗体的框架看不到进度条的进度情况,而在后一程序中就可以清楚地看到进度条的进度情况。
    上传时用的语句也是与下载语句一样的结构,但上传2000条记录却要用1个小时,这样的上传速度也太离谱了点吧,请教各位大虾有什么解决办法!程序如下:
try
  ADOConnection.close;
  ADOConnection.ConnectionString:='........';
  ADOConnection.open;
except
end;
if FrmProGress2 = nil then //FrmProGress2为进度条所在的窗体
  FrmProGress2 := TFrmProGress2.Create(Application.MainForm);
FrmProGress2.Show;
FrmProGress2.SeSkinProgressBar1.Position := 0;
try
  DataModule1.ADOConnection1.BeginTrans;
  with DataModule1.ADOQuery4 do
  begin
    close;
    sql.Text := 'delete from T_Sign';
    execsql;
  end;
  with DataModule1.ADOQuery3 do
  begin
    close;
    sql.Text := 'select * from T_Sign';
    open;
    FrmProGress2.SeSkinProgressBar1.Min := 0;
    FrmProGress2.SeSkinProgressBar1.Max := recordcount;
    while not eof do
    begin
      with DataModule1.ADOQuery5 do
      begin
        close;
        sql.Clear;
        sql.Add('insert into T_Sign(id,prosign,probreed,prostyle,prosize,memos) values(');
        sql.Add(inttostr(DataModule1.ADOQuery3.fieldbyname('id').Value) + ',');
        sql.Add('''' + DataModule1.ADOQuery3.fieldbyname('prosign').Value + ''',');
        sql.Add('''' + DataModule1.ADOQuery3.fieldbyname('probreed').Value + ''',');
        sql.Add('''' + DataModule1.ADOQuery3.fieldbyname('prostyle').Value + ''',');
        sql.Add('''' + DataModule1.ADOQuery3.fieldbyname('prosize').Value + ''',');
        sql.Add('''' + DataModule1.ADOQuery3.fieldbyname('memos').Value + ''')');
        execsql;
      end;
      next;
      FrmProGress2.SeSkinProgressBar1.Position := FrmProGress2.SeSkinProgressBar1.Position + 1;
    end;
    FrmProGress2.Hide;
  end;  
  DataModule1.ADOConnection1.CommitTrans;
  message1.ShowMessage('数据库更新成功!');
except
  DataModule1.ADOConnection1.RollbackTrans;
  FrmProGress2.Hide;
  message1.ShowMessage('数据库更新失败,请重试!');
end;注:
ADOQuery4、ADOQuery5与DataModule1.ADOConnection1连接,ADOConnection1与本地SQL服务器连接,ADOConnection2与网上SQL服务器连接,ADOQuery3与ADOConnection2连接。

解决方案 »

  1.   

    如果相同的程序在两台机器上执行结果不同
    就考虑一下重装系统
    这种情况很可能是系统的问题
      

  2.   

    我这是在同一台机器上执行得到不同的结果,只不过把同样的代码写在了两个不同的程序中,其实下载的窗体的绝大部分都是一样的。
      

  3.   

    两个程序的不同之处是什么呢?我是说代码的不同之处。
      

  4.   

    下载模块部分的程序是一样的,只不过这个模块用在不同的两个程序中而已。都是用同样的窗体,都是下载窗体加上进度条窗体。