2013-02-19 73 views
1

在ms访问中,我有一个表单,它也有一个子表单。我想以编程方式将主表单中的RecordsetType更改为快照,当子表/子表单具有一对多关系中的关联记录时。我写了一些vba代码来做到这一点,但我遇到了一些非常奇怪的行为。以编程方式更改以ms访问的RecordsetType或更好的方法

然后我发现这是因为当我改变RecordsetType时,表单刷新并导航回第一条记录。这会导致On Current事件和相关代码在子表单和主表单中两次触发。我正在考虑使用DoCmd.SearchForRecord导航回原始记录,但很快就意识到它不起作用,因为DoCmd.SearchForRecord中的WHERE条件在事件第二次触发时被覆盖。这一切似乎都很低效。

有没有其他方法可以做我想做的事情?我真的不想将窗体中的控件设置为“禁用”。

+1

为什么你不希望设置窗体AllowEdits属性?这很简单。 – Fionnuala 2013-02-19 16:14:45

+0

是的,这是一个非常简单的解决方案。我一直在做三个星期的VBA编程。尽管记录集类型和允许编辑属性表中的相同选项卡上,我甚至没有看到它在那里。而令人尴尬的是,我花了很多时间试图弄清楚如何使这个工作。谢谢! – jaromey 2013-02-19 16:39:08

+0

这是一个真正的问题,试图看到这些东西,有这么多dratted属性:) – Fionnuala 2013-02-19 16:40:37

回答

1

MS Access有一些选择的表单属性应该适合:AllowEdits,AllowDeletions和AllowAdditions。这些可以单独设置或一起设置。在这种情况下,看来你需要AllowAddition设置为yes和AllowEdits设置为

form properties

+1

我决定在必要时以编程方式更改“允许编辑”属性(无论如何我并不真的需要它)。我不知道为什么,但我意识到,当我在主窗体中将允许编辑更改为否时,我也可以不编辑或向我的子窗体添加新记录,但是当我以编程方式执行时,它工作得很好,我能够修改子表单。我已经测试了几次,而且我的代码不是很复杂。此外,On Current事件不会像前面提到的那样触发两次。 – jaromey 2013-02-22 02:03:22