注册 登录
编程论坛 VFP论坛

grid内直接编辑筛选出的部分字段值,几乎卡死,就是转圈。

wabc327 发布于 2022-05-24 14:20, 2033 次点击
通过set filter to筛选出部分字段,部分数据到grid表格中,设置表格部分字段的readonly为.F.,直接编辑字段值并按索引刷新排序,当滑动grid滑块时几乎卡死,vfp数据库,网络程序,不知所措,请各位大神帮忙指教!
15 回复
#2
laowan0012022-05-24 15:05
(删除)

[此贴子已经被作者于2022-5-24 15:57编辑过]

#3
wabc3272022-05-24 15:22
回复 2楼 laowan001
这是不一样的两个问题,这个是在grid中直接录入,由于筛选的记录不止一屏,修改第一屏后,通过滑块向下滑动时就卡死了。
#4
laowan0012022-05-24 15:53
以下是引用wabc327在2022-5-24 15:22:16的发言:

这是不一样的两个问题,这个是在grid中直接录入,由于筛选的记录不止一屏,修改第一屏后,通过滑块向下滑动时就卡死了。

抱歉,没看清楚
#5
wabc3272022-05-24 16:35
回复 4楼 laowan001
没关系 请您指教
#6
laowan0012022-05-24 16:46
如果记录数很多,过滤条件苛刻的话,会慢一些
但改变记录的值后,跳转记录行时,系统会重新索引(如果索引键值改变的话),也会变慢
#7
wabc3272022-05-24 17:07
回复 6楼 laowan001
没有改变索引键值,筛选条件只有两个并不复杂,筛选的记录第一屏修改多条记录没有慢的感觉,只有向下滑动滑块时,瞬间卡死 晕啊
只有本站会员才能查看附件,请 登录
#8
wabc3272022-05-24 17:08
回复 6楼 laowan001
只有本站会员才能查看附件,请 登录
#9
zhken2022-05-24 19:00
能否用set key to 锁定范围尝试一下
#10
zhken2022-05-24 19:16
只有本站会员才能查看附件,请 登录
#11
zhken2022-05-24 20:38
能否用set key to 锁定范围尝试一下
#12
wabc3272022-05-25 19:09
回复 11楼 zhken
您是说  把set filter to 换成set key to么
#13
zhken2022-05-25 20:07
看下10楼说的,有无帮助
#14
wabc3272022-05-26 10:22
public mcx[5]
mcx[1]=alltrim(upper(thisform.txtdah.value))
mcx[2]=alltrim(thisform.txtyjmlh.value)
mcx[3]=alltrim(thisform.txtxm.value)
mcx[4]=alltrim(thisform.txtcsrq.value)
mcx[5]=alltrim(thisform.txtsfzh.value)

mll=""
mll=mll+' .and. allt(lry)=xyz'
if mcx[1]<>"" then
    mll=mll+' .and. '+"mcx[1] $ dah"
endif
if mcx[2]<>"" then
    if len(alltrim(mcx[2]))=2 .and. alltrim(mcx[2])="1-" .or. alltrim(mcx[2])="2-" .or. alltrim(mcx[2])="3-" .or. alltrim(mcx[2])="4-" .or. alltrim(mcx[2])="5-" .or. alltrim(mcx[2])="6-" .or. alltrim(mcx[2])="7-" .or. alltrim(mcx[2])="8-" .or. alltrim(mcx[2])="9-"
        mll=mll+' .and. '+"mcx[2] $ subs(yjmlh,1,2)"                           
    else   
        mll=mll+' .and. '+"mcx[2] $ yjmlh"   
    endif
endif
if mcx[3]<>"" then
        mll=mll+' .and. '+"mcx[3] $ xm"
endif
if mcx[4]<>"" then
    mll=mll+' .and. '+"mcx[4] $ csrq"
endif
if mcx[5]<>"" then
    mll=mll+' .and. '+"mcx[5] $ sfzh"
endif
if left(mll,6)=" .and." then
    mll=subs(mll,8)
endif

sele b_dagl
set order to dahpxmlh
if mcx[1]#"" .or. mcx[2]#"" .or. mcx[3]#"" .or. mcx[4]#"".or. mcx[5]#"" then
    set filter to &mll
else
    set filter to allt(lry)=xyz
endif
go top
thisform.refresh
thisform.grid1.Column4.enabled=.t.
thisform.grid1.Column5.enabled=.t.
thisform.grid1.Column6.enabled=.t.
thisform.grid1.Column7.enabled=.t.
thisform.grid1.Column8.enabled=.t.
通过以上代码筛选后,直接在grid中修改数据,请问怎样优化以上代码,能在滑动grid滑块时不卡呢,是否与“工具”“选项”设置有关呢
#15
wabc3272022-05-26 11:32
回复 11楼 zhken
SET KEY TO 需要建立索引 我的筛选条件是随意变化的 无法确定关键字建立索引啊
#16
zhken2022-05-26 13:41
或者关掉set filter to 看下卡不卡,如果不卡就要从这里找原因,
又或者用select 来选出你要的条件数,不用set filter 再用新页面进一步加工,看卡不卡
不过数据量大多少会有一点
1