我有一个Access 2003数据库,它使用主窗体和子窗体中的数据表。主窗体允许用户从更新子窗体的记录源的菜单中进行选择。子窗体还根据窗体记录源中字段的数量和类型更新可用于编辑的字段的数量和类型。它基本上是一个动态数据表生成器。这在Access 2003中工作得很好,并且已经存在多年了。如果我在Access 2007中打开相同的数据库(完整或运行时),大多数菜单选择都有效。但是,如果我选择任何引用一个特定表的菜单选项,子表单将显示列标题,但不显示任何数据行或显示任何错误。就像查询返回零行一样。为什么Access 2007会有所不同?他们添加了新的保留字吗?
我尝试过的事情:
我很难过。
答案 0 :(得分:5)
我终于解决了这个问题。如上所述,我的数据表是一个子表单。父窗体设置用于确定如何构建子窗体的选项。在构建数据表的同时,子表单的sourceobject将替换为空白表单以隐藏先前的数据表,并呈现向新数据表的平滑过渡。它在Access 2000/2003中运行良好。
当使用Access 2007中的新数据表替换空白表单时,我发现 Access会自动将子表单数据的主键分配给未绑定父表单的LinkMasterFields和LinkChildFields属性。这些属性以前是空白的,我从未在代码中设置它们。也许这是Access 2007的一个尝试,而不是一个bug,但在我能找到的任何技术参考中都没有注意到行为差异,包括内置的帮助文件。由于父表单未绑定,可以过滤掉所有我的子表单记录。如果我在表单替换步骤中显式设置了LinkMasterFields =“”和LinkMChildFields =“”,那么一切都像以前一样工作。万岁!
同样,解决方案是,在设置子窗体的源对象时,请务必明确设置linkmastfields和linkchildfields属性以防止Access为您执行此操作。我希望这可以节省一些人经历的挫折时间。