注册 登录
编程论坛 VFP论坛

数据更新后带有grid的表单卡死

wabc327 发布于 2022-05-12 16:40, 2004 次点击
我这段代码是vfp6.0编写的,vfp自带数据库,数据环境添加的表,大局域网应用程序,是grid双击后得到字段付给变量,再返到C1容器上修改内容后保存的功能,C1容器与grid在同一表单上,修改后grid自动刷新了,可以看到修改后的效果。运行以上代码后,速度慢且有时候卡死,请大师指点一下,怎样优化,多谢!
[保存按钮]
sele b_kjda
repl all kf with ALLT(thisform.),wz WITH THISFORM.C1.txtwz.VALUE,hh WITH THISFORM.C1.txthh.VALUE,;
dwmc WITH THISFORM.C1.txtdwmc.VALUE,ajm WITH THISFORM.C1.txtajm.VALUE,ny WITH THISFORM.C1.txtny.VALUE,;
lry with XYZ, lrrq with DATE() for bh=wbh
thisform.C1.visible=.f.
thisform.grdB_kjda.enabled=.t.
=messagebox("修改信息成功",0+64,"系统提示")


[此贴子已经被作者于2022-5-12 17:01编辑过]

16 回复
#2
mywisdom882022-05-12 17:02
最好,把表单,数据,一起放上来测试
#3
wabc3272022-05-12 17:06
回复 2楼 mywisdom88
数据有10万条左右,修改没问题,就是反应十分慢,有时候卡死。
#4
cjc10102022-05-12 17:41
我认为,问题应该是出在   rapl all .... for .... 里。请问:有索引不?bh是唯一的还是?
#5
laowan0012022-05-12 18:56
与楼上有相同的疑问
建议在repl all这句前记录datetime(),之后messagebox(datetime()-刚才记录的时间),看看是不是卡在这里了
#6
zhken2022-05-13 00:38
update 试试。
#7
mywisdom882022-05-13 08:34
以下是引用wabc327在2022-5-12 17:06:23的发言:

数据有10万条左右,修改没问题,就是反应十分慢,有时候卡死。

10W记录,同时读出来,同时,更新,有必要,一下处理这么多数据吗
#8
hu9jj2022-05-13 08:35
赞成4楼的看法,可以用6楼的办法试试,应该会有效果。
#9
wabc3272022-05-13 08:50
回复 4楼 cjc1010
  BH是普通索引,BH实际上是一个唯一的值,修改的就是 通过双击GRID单条记录返回的字段值并赋给了变量,再通过repl all修改后 for bh=wbh 这个条件的记录,请问怎样优化啊,是不是我修改了这条记录的值后,为了看到效果刷新grid表格而导致了再一次取了全部数据,网络传输慢而卡死了呢,请指点!!!


[此贴子已经被作者于2022-5-13 09:01编辑过]

#10
laowan0012022-05-13 09:11
bh字段有索引?如果有可以试试seek bh然后repl/update当前记录,如果bh不唯一,那就要循环一下了
减少遍历数据表的次数,可以省下时间
#11
my23182022-05-13 09:32
如果bh是唯一的,把all去掉如何?
#12
wabc3272022-05-13 09:41
回复 10楼 laowan001
我在grid表格中,双击选择的这条记录,用变量的形式返给C1容器修改,直接用repl next 1 可以替换当前记录么 seek的方法我一会儿试一下 肯定可以 当不知道速度怎样
#13
cjc10102022-05-13 09:59
1、建个索引;2、seek记录;3、repl 字段 with 变量,不要all和for选项。
#14
wabc3272022-05-13 10:28
回复 10楼 laowan001
BH是有索引的(普通索引,值唯一),我用的是grid双击选的某一条记录返回字段值赋予变量到C1容器中,这样我直接用repl next 1 修改可以吗,当然你说的SEEK一定是可以的。
#15
laowan0012022-05-13 11:09
以下是引用wabc327在2022-5-13 10:28:06的发言:

BH是有索引的(普通索引,值唯一),我用的是grid双击选的某一条记录返回字段值赋予变量到C1容器中,这样我直接用repl next 1 修改可以吗,当然你说的SEEK一定是可以的。

既然是唯一的,双击时已经定位到需要修改的记录(与有没有索引无关了),那就直接repl 即可(不需要next 1,不需要all,也不需要for),这是最快的方法
#16
my23182022-05-13 16:10
以下是引用laowan001在2022-5-13 11:09:09的发言:


既然是唯一的,双击时已经定位到需要修改的记录(与有没有索引无关了),那就直接repl 即可(不需要next 1,不需要all,也不需要for),这是最快的方法

#17
wabc3272022-05-13 17:05
回复 15楼 laowan001
多谢!
1