Office中国论坛/Access中国论坛

标题: 两子窗体之间刷新问题,该如何解决 [打印本页]

作者: caoxi    时间: 2009-1-14 13:54
标题: 两子窗体之间刷新问题,该如何解决
主窗体A上,有子窗体B和C,B、C上的控件完全相同,且是同一数据源。现在B上某一字段更改后直接刷新C上相应字段。
在B的子窗体更新后,或B子窗体X字段编写代码:
Forms![A]![C]![X] = Me![X]

打开A时出现:
运行时错误‘2455’
您输入的表达式对属性Form/Report的引用无效

但实际运行时还是能够刷新的,把A作为启动窗体则不会有错误提示。
不知道为什么,查了很多资料都没有这面的讨论
作者: Henry D. Sy    时间: 2009-1-14 14:26
应该在子窗体的窗体更新后事件中
另一个子窗体重查询即可
作者: caoxi    时间: 2009-1-14 14:53
我是想让它直接刷新的,按您说的这样的,不是要麻烦些了吗?
作者: Henry D. Sy    时间: 2009-1-14 15:24
你的不是刷新,而是赋值。
两个子窗体都绑定同一个表,那么按你的方法将同时增加两条记录。
作者: caoxi    时间: 2009-1-14 15:33
是的,是赋值,我现在用了一个临时表,我想把我的例子发您看看,不知道怎么上传?
作者: Henry D. Sy    时间: 2009-1-14 15:35
将文件用winrar压缩,然后按论坛版面的右下角的回复,====接下来你应该明白了。
作者: caoxi    时间: 2009-1-14 15:43
谢谢您, 其实这个问题已困扰我很久了
作者: Henry D. Sy    时间: 2009-1-14 15:47
示例中两个子窗体的数据源,并不像你所说的同一个数据源?
作者: caoxi    时间: 2009-1-14 15:54
是的,开始时我怕说得太复杂,其实我是做了一个临时的表的,做数据信息交换的
作者: Henry D. Sy    时间: 2009-1-14 15:56
你到底想达到什么目的
两个窗体不同记录源,再怎么刷新也刷不出了呀。
作者: caoxi    时间: 2009-1-14 16:06
是这样的:
我把“SC生产记录管理 4K子窗1”中的内容赋值到“SC生产记录管理 01子窗”中是为了查看其内容,并作修改的(在“SC生产记录管理 01子窗”中)
用时时表的目的是,能让“SC生产记录管理 01子窗”完成更新后的过程,不然没法完成
作者: caoxi    时间: 2009-1-14 16:07
两表之间用赋值的办法,而不是更新表的办法,我是考虑到这样的运行速度会比较快
作者: Henry D. Sy    时间: 2009-1-14 16:08
SC生产记录管理 4K子窗1”中的内容赋值到“SC生产记录管理 01子窗”中是为了查看其内容
为什么不直接在 4K子窗1中查看
作者: caoxi    时间: 2009-1-14 16:10
本来可以不要“SC生产记录管理 01子窗”,而把所有的控件直接放在主窗体上,但这样的话需要一个个去刷新了,代码会感觉比较多比较烦
作者: Henry D. Sy    时间: 2009-1-14 16:12
但这样的话需要一个个去刷新了
怎么会呢
代码会感觉比较多比较烦
根本就不需要代码
作者: Henry D. Sy    时间: 2009-1-14 16:15
原帖由 Henry D. Sy 于 2009-1-14 16:12 发表
但这样的话需要一个个去刷新了
怎么会呢
代码会感觉比较多比较烦
根本就不需要代码

[attach]34548[/attach]
一个普通的丛栏式窗体就能解决你的问题
浏览记录按记录导航器,
新增记录按最右边的按钮。
作者: Henry D. Sy    时间: 2009-1-14 16:16
还可以用鼠标中建滚动记录。
作者: caoxi    时间: 2009-1-14 16:22
是链接主、子字段吧?但问题是实际应用中我会有这样的4对窗体在同一个主窗体上(数据型式是类似的),现在我把4个象“SC生产记录管理 01子窗”的统一成现在的一个““SC生产记录管理 01子窗”了,所以现在主窗体上是有4个表格形式的子窗体共用“SC生产记录管理 01子窗”来显示和修改数据的
作者: caoxi    时间: 2009-1-14 16:26
SC菲林档案4K的中还有很多段的,而且几条记录间经有联系的需要上下翻看的,所以象您那样的,会不太方便
作者: caoxi    时间: 2009-1-14 16:27
数据表模式可以直接加以比较查看了
作者: caoxi    时间: 2009-1-14 16:28
我的编码应该是错在哪里了?
作者: t小宝    时间: 2009-1-17 15:10
原帖由 caoxi 于 2009-1-14 13:54 发表
主窗体A上,有子窗体B和C,B、C上的控件完全相同,且是同一数据源。现在B上某一字段更改后直接刷新C上相应字段。
在B的子窗体更新后,或B子窗体X字段编写代码:
Forms![A]![C]![X] = Me![X]

打开A时出现:
运行 ...

你的问题的原因是:因为子窗体加载有先后顺序.
你的窗体中,B窗体先于C窗体加载,这时在B窗体的成为当前事件中引用C窗体就出错了,因B窗体已加载但C窗体尚未加载.
一个解决办法是在出错的代码前加一句以忽略错误,因为这个错误实际没有什么影响
On Error Resume Next
作者: t小宝    时间: 2009-1-17 15:15
补充一下:
在主窗体上先创建的窗体会先加载,所以还有一个办法是先创建子窗体C,再创建子窗体B.
但又有一个问题:在关闭主窗体时,先加载的子窗体会先卸载,这样在关闭时又会出现错误.
你自己领会一下吧
作者: caoxi    时间: 2009-1-18 15:48
问题解决了,深表感谢!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3