向Query插入大量数据的性能问题.

DoerSoft 2008-12-31 10:20:01
如题,从一个查询中查到了上千条数据,再Insert,Post到一个TQuery控件(缓存更新)中后,再ApplyUpdate,速度很慢,不知大家有什么好的解决方法.
...全文
116 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcyboom 2009-01-02
  • 打赏
  • 举报
回复
查询结果直接生成数据库中得临时表,基于临时表进行edit,在使用sql语句直接将临时表apply
success000 2008-12-31
  • 打赏
  • 举报
回复
帮顶
starluck 2008-12-31
  • 打赏
  • 举报
回复
TQuery 不是BDE
DoerSoft 2008-12-31
  • 打赏
  • 举报
回复
非bde
starluck 2008-12-31
  • 打赏
  • 举报
回复

緩存下是比較快的了。

你如果在BDE下,還有個BATCH的控件,可翠試下
长沙三毛 2008-12-31
  • 打赏
  • 举报
回复
ADOQuery有批处理方式:
    DM.TmpDS1.LockType   := ltBatchOptimistic;  // 使用批处理方式
// SQL 语句
DM.TmpDS1.Open;
// 添加若干记录
DM.TmpDS1.UpdateBatch(); // 批更新
DM.TmpDS1.Close;
DM.TmpDS1.LockType := ltOptimistic;
建议,同时使用事物处理模式,为保险起见
DoerSoft 2008-12-31
  • 打赏
  • 举报
回复
非也,查询出来的只是必需的几个字段,insert到QueryB,用户再输入其它数据.
比如仓库盘点操作,先load原料清单,再录入盘点数之类.
windindance 2008-12-31
  • 打赏
  • 举报
回复
你的流程有问题。
先 在QueryA中查询 1000条数据,然后这1000条数据全部Insert到QueryB,然后客户可能只编辑其中的1、2条,然后再Apply,有必要吗?

为什么不直接让客户访问QueryA?
windindance 2008-12-31
  • 打赏
  • 举报
回复
你的流程有问题。
先 在QueryA中查询 1000条数据,然后这1000条数据全部Insert到QueryB,然后客户可能只编辑其中的1、2条,然后再Apply,有必要吗?

为什么不直接让客户访问QueryA?
DoerSoft 2008-12-31
  • 打赏
  • 举报
回复
因为要先insert到Dataset中给用户编辑后方applyupdate到后台,就是这个insert的过程慢.
windindance 2008-12-31
  • 打赏
  • 举报
回复
先DisabledControls看看。
如果性能还是不行,那建议不要使用QUERY插入,而手工生成INSERT语句批量执行,速度会快很多。
DoerSoft 2008-12-31
  • 打赏
  • 举报
回复
表述错误,应该是TZQuery,类似于TAdoQuery之类的,就是一个Dataset.

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧