为什么这个下拉表单过滤器在本机表上工作但不在ODBC链接表上工作?

时间:2016-08-25 20:23:55

标签: sql sql-server ms-access odbc

我将Access用户应用程序从使用本机Access表转换为使用ODBC链接的SQL Server表。

我有一组表单,这些表单通过下拉列表中的选择进行过滤(在独立选择表单中)。按照设计,如果用户将下拉列表留空,则表单将不经过滤地启动。

所有这些都适用于本机表,但是当我使用链接表尝试它时,我得到ODBC--call failed错误

SQL查询为我用作过滤表单的记录源的查询生成的Access是:

SELECT linked.ASSIGNED_CARE_COORDINATOR, [rest of the variables]
WHERE (((linked.ASSIGNED_CARE_COORDINATOR)=[Forms]![frmCoord_Selector]![cmbCoords]))
OR   (((([linked].[ASSIGNED_CARE_COORDINATOR]) 
     Like [Forms]![frmDeadline_Report_Coord_Selector]![cmbCoords]) Is Null));

我知道ODBC连接本身很好;如果我在OR后删除代码,则查询与链接表一起使用,但当然没有show-all-if-null功能。

为什么这适用于本机表而不是完全相同的表的链接版本?

1 个答案:

答案 0 :(得分:0)

问题是LIKE子句中的OR,但Access显然可以在本机表上运行该奇怪的代码。因此,无论链接表还是本机表,将产生所需行为的正确代码是:

SELECT linked.ASSIGNED_CARE_COORDINATOR, [rest of the variables]
FROM linked
WHERE ((linked.ASSIGNED_CARE_COORDINATOR)=[Forms]![frmCoord_Selector]![cmbCoords])
     OR [Forms]![frmCoord_Selector]![cmbCoords] Is Null