点击事件问题,求解惑

alexlex 2008-04-25 10:34:42
a是我在其他地方自定义的一个cursor,有关字段为amt金额,和checked是logical类型
a是grid控件的datasource,我在grid控件里面加了一个checkbox,和checked对应

我想做到,点击checkbox时计算一下选中记录的总金额

开始时是下面这样,但是每次都把所有的金额都计算进去了,也就是where没起作用
select sum(amt) as sum_amt from a where checked=.T.

现在用
select * from a
select sum(amt) as sum_amt from a where checked=.T.
居然就可以了,只计算我选中记录的金额了,难道是有延迟?
...全文
183 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 alexlex 的回复:]
现在是这样
go recno()
select sum(amt) as sum_amt from a where checked=.T. into cursor temp
thisform.txtamt=temp->sum_amt

基本算实现功能了

谢谢大家
[/Quote]

不能将代码放在InteractiveChange事件中,必须放到Valid事件或Click中
十豆三 2008-04-25
  • 打赏
  • 举报
回复
那是因为你用了Messagebox
即延时又有焦点问题,这与我的方法原理一样。
alexlex 2008-04-25
  • 打赏
  • 举报
回复
说明先触发了以上事件,然后才更改了Check对应的字段。

刚才没事做,又试了试

if checked
messagebox('t')
else
messagebox('f')
endif

select sum(amt) as sum_amt from a where checked=.T. into cursor temp
thisform.txtamt=temp->sum_amt

发现checked的值随着checkbox的改变而改变,貌似是即时更新了,并非是事件之后更新的

奇怪-oo-
alexlex 2008-04-25
  • 打赏
  • 举报
回复
现在是这样
go recno()
select sum(amt) as sum_amt from a where checked=.T. into cursor temp
thisform.txtamt=temp->sum_amt

基本算实现功能了

谢谢大家

十豆三 2008-04-25
  • 打赏
  • 举报
回复
这样就可以了,不过感觉应该还有更简单的方法。

假你的Check列为Grid1的第二列

我在表单上建一个按钮(Command_tmp),Visible为.T.
此按钮的Init事件:
This.Left=-1000

此按钮的GotFocus事件:
Thisform.Grid1.Column2.Check1.SetFocus()

第二列Check的InteractiveChange事件:
Thisform.Command_tmp.SetFocus()

第二列Check的GotFocus事件:
Select Sum(amt) As sum_amt Into Cursor t1 From a Where checked=.T.
Thisform.Caption=Transform(t1.sum_amt)
alexlex 2008-04-25
  • 打赏
  • 举报
回复
谢谢wwwwb,因为我是半路出家,帮别人改程序,所以vfp不大熟,要新做个表单和生成dbf估计都会大费功夫-o-

to apple:我还试过 mouseup事件,貌似也是如此

问同事说,应该是没更新cursor,他的办法在前面加个go top,这样就更新了,我试了下,确实会更新记录
但是这样有新问题,我点后面的记录,但是go top后第一条记录的checkbox也会变动,这样计算总金额和第一个checkbox都不正确
十豆三 2008-04-25
  • 打赏
  • 举报
回复
如果用一个按钮就可以,的确与帖主的说法一样。
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
在专门的BUTTON事件中计算
十豆三 2008-04-25
  • 打赏
  • 举报
回复
我试了一下,不管是自由表还是临时表,
在Check的click,InteractiveChange中写代码都确实存在帖主的问题,和Valid事件还好一些,不过也存在。

说明先触发了以上事件,然后才更改了Check对应的字段。
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
你生成DBF表试试
alexlex 2008-04-25
  • 打赏
  • 举报
回复
又尝试了InteractiveChange里面
select * from a
select sum(amt) as sum_amt from a where checked=.T. into cursor temp
thisform.txtamt=temp->sum_amt
这样也是可以的
但是如果第一句改成
select * from a into cursor tempa就不行

如果第一句改成select * from b && b是随便的其他一个table也行
但是select * from b into cursor tempb这样就不行

wwwwb 2008-04-25
  • 打赏
  • 举报
回复
另外做一个表单,模拟环境,数据不要多少,可以测试就行了
alexlex 2008-04-25
  • 打赏
  • 举报
回复
因为表单是别人做的公司财务,可能不大方便直接传上来,抱歉

cursor a是我create cursor a (amt N(20,2), checked L)这样,我是用vfp6,不大清楚默认是什么锁,很不好意思

我也尝试过InteractiveChange,click,valid事件等,都是同样问题

刚刚又试了下,为了不出现brow窗口,我用了
select * from a into cursor temp01
select sum(amt) as sum_amt from a where checked=.T. into cursor temp
thisform.txtamt=temp->sum_amt

结果这样也是不行,我感觉原来可以是因为弹出了brow窗口,于是我加了个button,click事件里面用
select sum(amt) as sum_amt from a where checked=.T. into cursor temp
thisform.txtamt=temp->sum_amt

在点了checkbox之后,手动按button的话一切很正常

另外我在checkbox的click,InteractiveChange等事件里面只用select * from的话,那么看到里面checked的值都是符合checkbox目前状态的
十豆三 2008-04-25
  • 打赏
  • 举报
回复
select sum(amt) as sum_amt from a where checked=.T.

这个代码你放到什么事件中了。

应该放到Checkbox的InteractiveChange事件中
liuyann 2008-04-25
  • 打赏
  • 举报
回复

a是我在其他地方自定义的一个cursor, 用的什么锁和类别,

有的CURSOR会有很小的时延。
==== ====
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
select sum(amt) as sum_amt from a where 字段
这样试试
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
上传表单到www.access911.net/csdn
应该没有延迟
-晴天 2008-04-25
  • 打赏
  • 举报
回复
明白了...
-晴天 2008-04-25
  • 打赏
  • 举报
回复
什么叫做"计算选中字段的总金额"?你不就只有一个金额字段吗?

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧