我用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连接。
我同时使用了另一窗口中的进度条,在前一个程序中只看到进度条所在窗体的框架看不到进度条的进度情况,而在后一程序中就可以清楚地看到进度条的进度情况。
上传时用的语句也是与下载语句一样的结构,但上传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连接。
解决方案 »
- delphi 编译的程序NOD32会报病毒
- 要使小数点左边固定某长度(如5位),小数点右边保留2位,要使用哪个格式化函数?
- 如何统计多个日报表
- Delphi 2006-09专家榜
- 500分了.一个按钮中的两个事件怎么让它提交两次.
- 基本问题:DELPHI程序发布要设置什么吗?
- paradox数据库是不是不支持 group by year(...)
- format函数中,确定浮点数精度的(如.3f中的3),能不能用变量代替?
- DefaultDrawColumnCell(Rect, DataCol, Column, State)括号里的参数各代表什麽意识
- 在DLL文件中可以打开指定的数据库表吗?如何打开?
- XP MENU 控件
- delphi如何操作WORD中的表格和图片
就考虑一下重装系统
这种情况很可能是系统的问题