表单上的数据过滤生成"无法找到字段"

时间:2016-02-06 10:59:04

标签: ms-access ms-access-2010

我花了半天的时间试图弄清楚为什么会出现错误消息框

  

无法找到字段' TransactionTypeID'

在我的 database。如果您打开Form1,然后使用标题在列TransactionTypeID上应用任何过滤器(例如,取消选中空白),然后尝试打开第二列的排序/过滤,则会显示错误消息。 如果我将组合框转换为文本框或从表单选择表Tenants1中删除,则错误消失。我使用Access 2010 32位。在这个例子中,我尽可能地简化了表格,从头开始创建数据库,导入数据,压缩/修复都没有帮助。

你有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我发现了问题。如果表以这种方式加入,则内置数据表表单过滤以错误的方式工作:

SELECT VouchersMain1.VDate, VouchersMain1.TransactionTypeID
FROM Tenant1 INNER JOIN VouchersMain1 ON Tenant1.TenantID = VouchersMain1.TenantID;

如果我反向表连接方向,内置过滤工作正常:

SELECT VouchersMain1.VDate, VouchersMain1.TransactionTypeID
FROM VouchersMain1 INNER JOIN Tenant1 ON VouchersMain1.TenantID = Tenant1.TenantID;

看起来这是另一个Access错误。

另外,感谢@Munsterlander,如果将表单的记录源替换为已保存的查询而不是SELECT

,问题就会消失

答案 1 :(得分:0)

尝试将您的字段引用为Forms!FORMNAME!CONTROLNAME。我假设,根据您所写的内容,您尝试根据组合框中选择的内容过滤查询。

答案 2 :(得分:0)

从表单RecordSource中删除表Tenants1(此表不是必需的,不会在生成的查询中公开字段)。

您还会注意到您的记录源已设置(通过Access)ReadOnly(设计错误,未定义连接)。尝试在Tenant1表中添加几个记录,比如David和Nathan。

您会发现现在您的查询将输出6条记录(而不是2条记录),因为查询(没有连接)为表Tenant1(3)的所有记录列出一行,为表VouchersMain1的每条记录列出一行( 2),总共给出2 * 3 = 6行。