带有动态记录源的数据表在Access 2007中没有显示记录,但在Access 2003中有效

RAW*_*RAW 2 ms-access ms-access-2007 ms-access-2003

我有一个Access 2003数据库,它使用主窗体和子窗体中的数据表.主窗体允许用户从更新子窗体的记录源的菜单中进行选择.子窗体还根据窗体记录源中字段的数量和类型更新可用于编辑的字段的数量和类型.它基本上是一个动态数据表生成器.这在Access 2003中工作得很好,并且已经存在多年了.如果我在Access 2007中打开相同的数据库(完整或运行时),大多数菜单选择都有效.但是,如果我选择任何引用一个特定表的菜单选项,子表单将显示列标题,但不显示任何数据行或显示任何错误.就像查询返回零行一样.为什么Access 2007会有所不同?他们添加了新的保留字吗?

我试过的事情:

  • 更新表中的每个字段以确保没有空值(无更改)
  • 重命名每个字段和表名,以防万一有新的保留字(无变化)
  • 压实并修复前端和后端(无变化)
  • 尝试逐个包含和排除字段以查看是否有任何更改(无更改)
  • 将表单的记录源放在新查询中.(它返回了预期的行数)
  • 选中以确保表单未设置为数据输入模式.(不是)
  • 选中以确保代码中未应用任何过滤器.(没有)
  • 选中以确保查询在Access 2007中可更新.(它是)
  • 从源表中选择性删除数据块.(没变)

我很难过.

RAW*_*RAW 5

我终于解决了这个问题.如上所述,我的数据表是一个子表单.父窗体设置用于确定如何构建子窗体的选项.在构建数据表的同时,子表单的sourceobject将替换为空白表单以隐藏先前的数据表,并呈现向新数据表的平滑过渡.它在Access 2000/2003中运行良好.

当空白表单替换为Access 2007中的新数据表时,我发现Access会自动将子表单数据的主键分配给未绑定父表单的LinkMasterFields和LinkChildFields属性.这些属性以前是空白的,我从未在代码中设置它们.也许这是Access 2007的一个尝试,而不是一个bug,但在我能找到的任何技术参考中都没有注明到行为差异,包括内置的帮助文件.由于父表单是未绑定的,因此它具有过滤掉所有子表单记录的效果.如果我在表单替换步骤中显式设置了LinkMasterFields =""和LinkMChildFields ="",那么一切都像以前一样工作.万岁!

同样,解决方案是在设置子表单的源对象时,请务必明确设置linkmastfields和linkchildfields属性以防止Access为您执行此操作.我希望这可以节省一些人经历的挫折时间.