在父窗体上新建记录时出现子窗体ODBC错误[英] Subform ODBC Error When New Record On Parent Form

问题描述

你好,

我有一个包含子表单的表单.两者都是使用表单向导创建的,并由 IXO_NR 列(在两个不同的表上)绑定,该列是父表单和子表单上文本框的控制源.

目的是将子表单的 IXO_NR 默认为父表单的 IXO_NR,然后重新查询子表单以防止用户必须滚动浏览所有子表单的记录才能找到他们可能正在寻找的记录.如果父表单上有新记录,则应重置子表单上的 IXO_NR,因为它包含最后选择的记录中的值.

我尝试通过多种方式重置它,但我一直收到 ODBC 错误,因为我假设,因为在子表单的文本框中填充了一个值,Access 解释为在子表单中添加了一条新记录好.由于子表单有几个非空列,因此生成了 ODBC 错误.

在父窗体的 FORM_CURRENT 事件上:

如果我!txtInfoXchgObjNr >0 然后
Me!subfrmIXODesc!txtInfoXchgObjNr.DefaultValue = Me!txtInfoXchgObjNr
我!subfrmIXODesc.Requery
其他
'' Me!subfrmIXODesc!txtInfoXchgObjNr.Undo
'' 我!subfrmIXODesc!txtInfoXchgObjNr.Value = 0
''等
结束如果

那么如何重置子表单/子表单的文本框以防止这种情况发生呢?

谢谢, Ed.

推荐答案

在这种情况下,您错误地引用了您的子窗体控件.应该是

如果我!.xtInfoXchgObjNr >0 然后
Me.subfrmIXODesc.form.xtInfoXchgObjNr.DefaultValue = Me.txtInfoXchgObjNr
Me.subfrmIXODesc.formRequery
其他
'' Me.subfrmIXODesc.form.xtInfoXchgObjNr.Undo
'' Me.subfrmIXODesc!txtInfoXchgObjNr.Value = 0
''等
结束如果

但我不确定这是否能解决你的问题.让我们知道.
J

在这种情况下,您错误地引用了您的子窗体控件.它应该是

展开|选择span>|Wrap|行号

嗨,J,

谢谢回复!

我拥有的代码和您提供的代码都可以填充文本框并检索子表单中的相关记录.我在寻找解决方案时发现了该代码.你的方法效率更高吗?

当我尝试将子表单中的文本框重置为"null"时,会在 ELSE 中生成 ODBC 错误.添加新记录时的价值,这就是它被注释掉的原因.

如果在主表单位于新记录上时我不重置子表单的文本框,它将填充不正确的值,如果在子表单上输入并保存数据,它将关联子表单的数据到错误的PK.

例如,如果主表单有一条 PK 为 2 的现有记录,则子表单的文本框将填充 2,并且将检索任何相关数据(如果有).在新记录中,主窗体的对象为空白,但子窗体的文本框包含值 2,而不是空白.

发生 ODBC 错误是因为子表单不包含有效插入所需的所有信息(例如,无法将空值插入列...列不允许空值).如果填充并保存了所需的信息,它将与存储在文本框中的最后一个 PK 值相关联,在本例中为 2.

所以问题是,如何将子表单的文本框重置为"null"?值所以 Access 不会尝试插入记录并引发 ODBC 错误?

我相信你会说,我不熟悉 Access 及其对象、方法等.如果你碰巧有任何我可以研究的参考资料,请随时告诉我.

再次感谢,感谢所有帮助!

编.

附言抱歉这么长的回复:-)

除非您实际设置焦点并输入一些数据,否则不会保存子表单记录.默认条目和假定的 Not Null 值,即使它们"出现"在子表单中,未提交.我相信撤消是导致错误的原因..但是我无法在您的情况下进行测试.你不应该做你正在做的事.

作为一个测试,注释掉你拥有的代码,进入你的主窗体并输入一个测试记录.您可能会在子表单中看到数据,但是……不要打扰它.

保存主窗体记录.

现在转到子表单表并尝试查找 FK 记录.它不会/不应该存在.

让我知道.
J

本文地址:https://www.itbaoku.cn/post/1050475.html

相关标签/搜索