以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  [求助]如何快速锁定关联表的记录?  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=10515)

--  作者:hayz
--  发布时间:2007/12/1 23:29:00
--  [求助]如何快速锁定关联表的记录?
现在使用LockRowFor("记录","小计",">",0)来锁定关联表里的所有记录.开始时并没有问题,但后来关联表里的记录多了以后(现在大概有30000条),每次都要几乎等一分钟才能完成.请问还有其它公式可以加快速度吗? 本来想用lockAll的,但只能锁定当前表而不能锁定关联表.

还有现在发觉易表最大的缺点就是当文件记录数量多的时候就变得特别慢,例如"保存文件"和使用和"for"有关的函数.

不知什么时候才能解决.


--  作者:程兴刚
--  发布时间:2007/12/1 23:39:00
--  
何必这样呢?

        关联表的小计列操作公式:If([小计] > 0,LockRow(Row),UnlockRow(row))每次炒作,即时锁定,所见即所得,还慢吗?


--  作者:hayz
--  发布时间:2007/12/1 23:52:00
--  
这个公式不行,当一操作关联表的数据时就马上锁住了,如果单价或者数量输错了就没法再修改,我是想在录入完主表和关联表的数据后,再按一个"保存"的自定义按钮才把主表和关联表的数据锁住.
--  作者:程兴刚
--  发布时间:2007/12/1 23:59:00
--  
窗口加一个修改按钮公式为:UnlockRow(row)  需要修改时,点中要修改的行,点击修改按钮,修改完毕,自动锁定该行,有什么不可以!
--  作者:hayz
--  发布时间:2007/12/2 0:07:00
--  
这样的话问题就大了,我现在这个是收款系统,如果当单据打印出来之后还可以进行修改就大麻烦了.

我现在的状况是这样的, 主表就录入收据号码,客户名称和日期. 关联表就可以录入单价,货品和数量,然后自动生成总额.

最后一按打印保存后就自动锁定主表和关联表的数据,然后保存,以后不能让录入员再作修改了.

所以就必须要在这个按钮上进行锁定操作, 原来用我上面写的公式了没有问题的, 但现在随着数据越来越多时就变得很慢了,每次点这个按钮以后要等1~2分钟才可以完成.实在太慢了.

整个公式是这样的, 请帮忙看看还有没有得优化一下.谢谢.

if(FindRow("记录","收据号码","=",[收据号码])>1,Report("明细","打印",0,0,2),if([收据号码]="" or [录入日期]="" or [客户名称]="" or [币种]="" or [小计]=0,MsgBox("有内容未填好,请重新检查输入!",0,1),CopyRows("记录","收据号码","=",[收据号码]) And LockRowFor("明细","收据号码","=",[收据号码]) And LockRowFor("记录","小计",">",0) And LockRow(row) And Save() And MsgBox("操作成功!",1,4) And Report("明细","打印",0,0,2)))

-=-=-=- 以下内容由 hayz2007年12月02日 00:11am 时添加 -=-=-=-
顺便问一下, 如果数据量比较大的表你们是通过什么办法来避免速度慢的问题? 例如保存和查找,筛选数据? 因为如果数据超过2~3万条时就会变得很慢,文件大概有2MB大吧.


--  作者:程兴刚
--  发布时间:2007/12/2 0:29:00
--  
   1、根据公式看,您的记录表不需要手工操作,将刚才那个公式加到记录表里,记录表不需要再次修改!   If([小计] > 0,LockRow(Row),UnlockRow(row))
   2、这样就可以去掉And LockRowFor("记录","小计",">",0) 这一段,省却这一段的判断并锁定,减少对一个表的 LockRowFor()操作!
--  作者:Czy
--  发布时间:2007/12/2 0:30:00
--  
你的问题似乎和LockRowFor没有直接关系,虽然你用了两次LockRowFor,不过即使5万行的数据,两个公式中分别一个条件的话,十秒钟的执行时间足够了。

2M大的文件仅保存都要超过1分钟,目前来说如果数据集中保存在一个文件中,速度慢是没有办法的事。


--  作者:Czy
--  发布时间:2007/12/2 0:32:00
--  
下面引用由程兴刚2007/12/02 00:29am 发表的内容:
1、根据公式看,您的记录表不需要手工操作,将刚才那个公式加到记录表里,记录表不需要再次修改!   If( > 0,LockRow(Row),UnlockRow(row))
   2、这样就可以去掉And LockRowFor("记录","小 ...

呵,问题不在这,3万条数据锁定公式即使执行10次也不会超过一分钟。


--  作者:程兴刚
--  发布时间:2007/12/2 0:44:00
--  
哦,是这样,我只是想减少一次操作,呵呵!
--  作者:hayz
--  发布时间:2007/12/2 10:24:00
--  
谢谢两位帮助,其实易表的公式编辑非常直观好用,而且灵活.这就是我开始对它着迷的原因,但是随着文件慢慢增大,操作慢的情况实在令人头痛,也只能通过改变公式和分解文件来加快速度了.