解决方案 »
- 一个TRZcheckbox的BUG的,求解,郁闷
- 如何读取TWebBrowser状态(Status Code)
- 无法安装补丁
- 如何取一個字段
- 如何调整quickrep内QRSubDetail1和QRBand1(bandtype为:rbGroupHeader)的上下关系?
- 没有一套精致的图标是我心中永远的痛,请问各位大侠有没有,50分相送!
- 怎樣在控件上使用enter代替tab
- 高分!关于字符串的操作,不是很难,可我想不过来了。
- DELPHI+Interbase,当SELECT时 想设只读锁定怎么办???
- 如何在数据库里实现点击字段值时弹出下拉菜单
- 如何进行数据结构方式写入到文件中内有图片
- 字符串转化为时间格式出错
方式二,若dataset沒有采用cache更新數據,在下一次append之前,就會執行post,將數據提交到數據庫;兩種方式哪個快,你可以采用sql profile跟蹤看看。沒有實際跟蹤,不知道。個人猜測:方式一改進後,會比較快
sql语句是最快的
全部insert之后再显示数据
要比insert一条之后就更新好很多
第一种方式如果在循环中间加上 Application.ProcessMessages 至少不会有假死的情况出现第二中方式 如果tempQry是设置的批量提交模式 再最后提交的时候会需要较长时间,如果不是这个模式和第一种有点类似,在新增一条记录时上一条记录会提交到数据库可以试试以第二种方式设置成批量提交的模式(即tempQry.CursorType:=ctStatic;tempQry.LockType:= ltBatchOptimistic;)然后每一百条(或其他值)记录 post或 updatebatch一次没有试过 不知道 会不会好点
第二种更清晰,语言风格更好一些,毕竟是ado自己提供的方法。
for i:=0 to 100 do begin
with insertQry do begin
close;
sql.Clear;
for j:=0 to 99 do
begin
sql.Add('insert into myTbl(mID) values('+Inttostr(i*100+j)+')');
end;
ExecSQL;
end;
end;第二种方法在数据库中肯定有缓存,Append会将数据暂存到缓存中,待Post时会一次性将数据提交给服务器,至于提交的过程,我想应该不是以SQL语句的形式提交,效率应该更高一点儿,但是就如4楼所说,如果没有禁止刷新界面的话,其效率受界面影响,如果禁止刷新界面的话,其效率肯定比一次提交一条SQL语句的第一种方法要高得多。10000条语句在实际插入的过程中,也就是几秒种的事,如果要测试的话,建议将再加大10倍数据量。