我有一个Access 2003数据库,它使用主窗体和子窗体中的数据表 . 主窗体允许用户从更新子窗体的记录源的菜单中进行选择 . 子窗体还根据窗体记录源中字段的数量和类型更新可用于编辑的字段的数量和类型 . 它基本上是一个动态数据表生成器 . 这在Access 2003中工作得很好,并且已经存在多年了 . 如果我在Access 2007中打开相同的数据库(完整或运行时),大多数菜单选择都有效 . 但是,如果我选择任何引用一个特定表的菜单选项,子表单将显示列 Headers ,但不显示任何数据行或显示任何错误 . 就像查询返回零行一样 . 为什么Access 2007会有所不同?他们添加了新的保留字吗?
我试过的事情:
-
更新了表中的每个字段,以确保没有空值(无更改)
-
重命名每个字段和表名,以防万一有新的保留字(无变化)
-
压实并修复前端和后端(无变化)
-
尝试逐个包含和排除字段以查看是否有任何更改(无更改)
-
将表单的记录源放在新查询中 . (它返回了预期的行数)
-
选中以确保表单未设置为数据输入模式 . (不是)
-
选中以确保代码中未应用过滤器 . (没有)
-
选中以确保查询在Access 2007中可更新 . (它是)
-
从源表中有选择地删除了数据块 . (没变)
我很难过 .
1 回答
我终于解决了这个问题 . 如上所述,我的数据表是一个子表单 . 父窗体设置用于确定如何构建子窗体的选项 . 在构建数据表的同时,子表单的sourceobject将替换为空白表单以隐藏先前的数据表,并呈现向新数据表的平滑过渡 . 它在Access 2000/2003中运行良好 .
当空白表单替换为Access 2007中的新数据表时,我发现 Access is automatically assigning the primary key of the subform data to the LinkMasterFields and LinkChildFields properties of the unbound parent form . 这些属性以前是空白的,我从未在代码中设置它们 . 也许这是Access 2007的一个尝试,而不是一个bug,但在我能找到的任何技术参考中都没有注明到行为差异,包括内置的帮助文件 . 由于父表单未绑定, it has the effect of filtering out all of my subform records . 如果我在表单替换步骤中显式设置LinkMasterFields =“" and LinkMChildFields="”,则一切都像以前一样工作 . 万岁!
再次, the solution is that when setting the sourceobject of a subform, be sure to explicitly set the linkmastfields and linkchildfields properties to prevent Access from doing it for you . 我希望这可以节省一些人经历的挫折时间 .