标题:还是我花屏现象的解决。今天我找到了原因,请专家评讲一下!
只看楼主
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
结帖率:97.14%
已结贴  问题点数:20 回复次数:17 
还是我花屏现象的解决。今天我找到了原因,请专家评讲一下!

我的花屏现象让各位老师、专家费心了。经过对我的程序的指教,真的是让我受益匪浅呀。按照你们的意见,我也不断优化了我的程序,举一反三,对其他模块都作了修改。再次感谢。

程序优化了,改的也更简洁了,但花屏现象还是没有根解。但我结合老师们的意见,这几天在思考,反复对主录入表单进行了分析,我觉得是不是下面的事件出了问题,请老师们再次指教,我改了一下,感觉是好多了。

原先表单的grid1.AfterRowColChange事件中,执行了以下一大段:意思是解决grid1的几个列,通过三个check的值,判断可输入数据或不可以输入数据的。
cLJ=ThisForm.grid1
*--------
IF ThisForm.check1.Value=1
   cLj.column8.Enabled=.F.
   cLj.column9.Enabled=.F.
   cLj.column10.Enabled=.F.
ENDIF
IF ThisForm.check2.Value=1
   cLj.column8.Enabled=.F.
   cLj.column9.Enabled=.F.
   cLj.column10.Enabled=.F.
ENDIF
IF ThisForm.check3.Value=1
   cLj.column8.Enabled=.F.
   cLj.column9.Enabled=.F.
   cLj.column10.Enabled=.F.   
ENDIF
IF ThisForm.check1.Value=1.and.ThisForm.check2.Value=1
   cLj.column8.Enabled=.T.
   cLj.column9.Enabled=.F.
   cLj.column10.Enabled=.F.
ENDIF
IF ThisForm.check1.Value=1.and.ThisForm.check3.Value=1
   cLj.column8.Enabled=.T.
   cLj.column9.Enabled=.F.
   cLj.column10.Enabled=.F.
ENDIF
IF ThisForm.check2.Value=1.and.ThisForm.check3.Value=1
   cLj.column8.Enabled=.F.
   cLj.column9.Enabled=.T.
   cLj.column10.Enabled=.F.
ENDIF
IF ThisForm.check1.Value=1.and.ThisForm.check2.Value=1.and.ThisForm.check3.Value=1
   cLj.column8.Enabled=.T.
   cLj.column9.Enabled=.T.
   cLj.column10.Enabled=.F.
ENDIF
IF ThisForm.check1.Value=0.and.ThisForm.check2.Value=0.and.ThisForm.check3.Value=0
   cLj.column8.Enabled=.F.
   cLj.column9.Enabled=.F.
   cLj.column10.Enabled=.F.
ENDIF

现在更改为:
   将以上的程序拷贝到一个新建的(检测按钮)中,在表单INIT事件中执行(thisform.co_检测.click),一次性判断就行了。
更改理由:
  我是想,如果把上述语句放在grid1.AfterRowColChange中,当在grid1中每移动一行或一列,都要执行上述语句,几条记录一录入,是不是执行太频烦,导致CPU达75%以上,直到花屏的主要原因呢?





[ 本帖最后由 YZCZWCB 于 2010-3-20 13:23 编辑 ]
搜索更多相关主题的帖子: 专家 现象 
2010-03-20 13:21
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:0 
这样还是不行的,因为check的值是可以动态改变的.应该将代码写到check的事件中去!

(就这几个判断不会产生CPU的高使用率)

★★★★★为人民服务★★★★★
2010-03-20 16:31
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
你更改理由有道理
2010-03-20 17:07
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
得分:0 
老师们,请指教呀。

说真的,我的花屏的原因就是CPU占有75%,一打开VFP就有45%。

在录入数据时,一会儿的功夫,也就是几条数据记录,就达到50%以上....速度越来越慢、越来越慢、越来越慢、越来越慢、越来越慢.....最后完了,此时,CPU占有75%

不过,我改了之后,还真有点效果,至少不那么快就花屏了...

那么还有哪些,会让CPU那么高呢?请指教啦

[ 本帖最后由 YZCZWCB 于 2010-3-20 17:41 编辑 ]
2010-03-20 17:23
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
正如2楼所指出的,楼主的这些代码只要放在check的interactivechange事件中就可以了,当这些值发生变化时才需要执行这些操作。
另外请楼主检查是否存在对记录进行核对(或计算审核)的操作,是不是这类操作在录入的过程中反复执行,以至于录入的记录一多,CPU就忙不过来了。有很大的可能性是这些代码在表格的事件中。
表格中的代码尽量放在TEXT中,尽量不要直接放在GRID中。

[ 本帖最后由 hu9jj 于 2010-3-20 18:21 编辑 ]

活到老,学到老! http://www. E-mail:hu-jj@
2010-03-20 18:15
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:10 
我看了一下,那个"政府采购项目分类"中的"取消"按钮的代码是thisform.queryunload
改成thisform.release就没问题了

★★★★★为人民服务★★★★★
2010-03-20 18:22
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
得分:0 
以下是引用hu9jj在2010-3-20 18:15:05的发言:

正如2楼所指出的,楼主的这些代码只要放在check的interactivechange事件中就可以了,当这些值发生变化时才需要执行这些操作。
另外请楼主检查是否存在对记录进行核对(或计算审核)的操作,是不是这类操作在录入的过 ...

还真对了。我的GRID中,对每行的记录,都要根据预算单价,计算出预算总额,并同时根据HCECK的值判断,计算出:预算内资金或预算外资金或自筹资金额。

原先表单的grid1.预算单价列中text1.interactivechange事件中都要计算的。
SELECT Jzzk_lsk
GO RECNO()
cLJ=ThisForm.grid1
k1=ThisForm.check1
k2=ThisForm.check2
k3=ThisForm.check3
*---------
cLj.column7.text1.Value=cLj.column5.text1.Value*cLj.column6.text1.Value
cLj.column8.text1.Value=0
cLj.column9.text1.Value=0
cLj.column10.text1.Value=0
*------------
DO CASE
   CASE k1.Value=1.AND.k2.Value=1.AND.k3.Value=0
        cLj.column9.text1.Value=cLj.column7.text1.Value-cLj.column8.text1.Value-cLj.column10.text1.Value
   CASE k1.Value=1.AND.k3.Value=1.AND.k2.Value=0
        cLj.column10.text1.Value=cLj.column7.text1.Value-cLj.column8.text1.Value-cLj.column9.text1.Value
   CASE k2.Value=1.AND.k3.Value=1.AND.k1.Value=0
        cLj.column10.text1.Value=cLj.column7.text1.Value-cLj.column8.text1.Value-cLj.column9.text1.Value
   CASE k1.Value=1.AND.k2.Value=0.AND.k3.Value=0
        cLj.column8.text1.Value=cLj.column7.text1.Value-cLj.column9.text1.Value-cLj.column10.text1.Value
   CASE k2.Value=1.AND.k1.Value=0.AND.k3.Value=0
        cLj.column9.text1.Value=cLj.column7.text1.Value-cLj.column8.text1.Value-cLj.column10.text1.Value
   CASE k3.Value=1.AND.k1.Value=0.AND.k2.Value=0
        cLj.column10.text1.Value=cLj.column7.text1.Value-cLj.column8.text1.Value-cLj.column9.text1.Value
   CASE k1.Value=0.AND.k2.Value=0.AND.k3.Value=0
        cLj.column10.text1.Value=cLj.column7.text1.Value-cLj.column8.text1.Value-cLj.column9.text1.Value
ENDCASE
ThisForm.grid1.Refresh
今天,我也一并移出了,放到一个新增加的“计算按钮”中,在grid1.colmn8.text1.valid事件中,执行ThisForm.co_计算.Click。
另外,原先也没有用对象变量。
如:cLJ=ThisForm.grid1、k1=ThisForm.check1....而是直接用
ThisForm.grid1.column9.text1.Value=ThisForm.grid1.column7.text1.Value-ThisForm.grid1.column8.text1.Value-ThisForm.grid1.column10.text1.Value
看到一些资料,说这样也会慢的


[ 本帖最后由 YZCZWCB 于 2010-3-20 18:36 编辑 ]
2010-03-20 18:27
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
得分:0 
回复 6楼 cnfarer
好,谢谢。我改一下。
不过,有什么区别呢?
因为,queryunload事件中,就只有一个:thisform.release
2010-03-20 18:33
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:10 
表格的列一般是与表的字段绑定的,我一般习惯直接用字段名来计算,这样写起来更方便些,至于对运行速度是否有影响,我还没有分析测试过。
我通常是用自由表与表格绑定,在“保存”按钮中对临时表中的数据全面检查核对后再添加(或更新)到数据库的表中。

活到老,学到老! http://www. E-mail:hu-jj@
2010-03-20 18:49
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
粗看了一下7楼的代码,其中的ThisForm.Grid1.Refresh是多余的,在表格中的代码对值改变后,不需要刷新就可以看得到的。楼主可以注释掉刷新代码试试看。

活到老,学到老! http://www. E-mail:hu-jj@
2010-03-20 18:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-299983-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.176195 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved