数据窗口更新速度慢的问题

riverwoods 2004-09-28 01:25:21
datawindow使用quickselect

有1400多条记录

我采用如下方法更新全部记录的某一列,请问是否对

for i = 1 to dw_2.rowcount()

dw_2.object.price[i] = data//将该列全部更新为data表示数据

next

dw_2.update()
commit;

居然用了45秒?请问我的方法是否对?敬请解答

...全文
142 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
denxiaom 2004-09-28
  • 打赏
  • 举报
回复
我遇到过一次,表已经有了一个触发器,我没发现,在程序里又写了一便代码,结果很慢。看看数据库日志有没有问题。
wangxichen 2004-09-28
  • 打赏
  • 举报
回复
消息回复不了,在这里写乐:
没提交是因为后面没加入提交的语句(如果你的数据库是自动提交的就可以不用),
嵌入的update语句提交要加入 commit using sqlca;
aichangfeng 2004-09-28
  • 打赏
  • 举报
回复
如果一个数据窗口涉及多个表,也会很慢
hzhxxx 2004-09-28
  • 打赏
  • 举报
回复

完全 同意

回复人: lzheng2001(1加1=0) ( ) 信誉:109


假如总是慢,对数据库后台进行一些维护
wangxichen 2004-09-28
  • 打赏
  • 举报
回复
换种方法看看,先不对数据窗中的列进行处理,数据窗update提交以后,
用嵌入的sql语句对数据库中的记录更新。
update table set column = value where ... using sqlca;
flyerlxg 2004-09-28
  • 打赏
  • 举报
回复
基本上可以肯定的是提交事物的时候慢下来了,那么这个时候要考虑一下该列是否需要建立索引的问题,另外一种办法是使用动态SQL语句(而不要使用内嵌的SQL语句,因为前面的方法就慢了),我曾经遇到过这种现象,用内嵌的DELETE TABLENAME WHERE ……,结果需要较长的时间,后面改用动态SQL语句,速度客户还基本接受。
LinuxSon 2004-09-28
  • 打赏
  • 举报
回复
不光是你方法的问题,还应看看表设计中,你需要更新的列是否是聚簇索引,如果是那么的确会很慢。
jdsnhan 2004-09-28
  • 打赏
  • 举报
回复
lzheng2001(1加1=0)分析的很透彻啊。

不过一般情况下,1400条记录对于现在的配置来说,应该是没问题的。建议楼主查找其他的地方,如有没有触发器等等。

还有,用update直接递交的速度如何呢?
lzheng2001 2004-09-28
  • 打赏
  • 举报
回复
1.方法基本没错,最好用变量保存rowcount()
ll_rows = dw_1.rowcount()
for i = 1 to ll_rows
dw_2.object.price[i] = data//将该列全部更新为data表示数据
next
dw_2.update()
commit;

2.如果有多用户操作,可能会因为等待其它用户,使你的更新变慢

3.如果你的程序设置了trace功能,也会变得很慢

4.不要用settrans(sqlca),而用settransobject

5.适当设置dw的update properties

6.检查网速是否正常

7.几乎忘记最重要的一点,数据库的表上有多少行记录,如果有几十万行,而又没有适当使用索引的话,肯定会慢


圣殿骑士18 2004-09-28
  • 打赏
  • 举报
回复
既然更新成同一个值,那还不如直接用sql语句更新.速度最快.
wangxichen 2004-09-28
  • 打赏
  • 举报
回复
如果你赋值时不成功,就换种赋值语句试试:
dw_2.setitem(行,列,值)
dw_2.accepttext()
wangxichen 2004-09-28
  • 打赏
  • 举报
回复
这个update语句只是改变数据库记录,数据窗的当然不会变化。
只有重新检索之后才会变。
发帖
DataWindow

603

社区成员

PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
帖子事件
创建了帖子
2004-09-28 01:25
社区公告
暂无公告