2016-08-25 26 views
0

我正在将Access用户应用程序从使用本机Access表转换为使用ODBC链接的SQL Server表。为什么此下拉表单筛选器在本机表上工作,但不在ODBC链接表中工作?

我有一组窗体,这些窗体是通过从下拉列表中选择来进行过滤的(在独立选择窗体中)。按照设计,如果用户将下拉菜单留空,表单将启动未过滤。

所有这一切的工作原理与本地的表,但是当我尝试使用链接的表,我得到一个错误ODBC--call failed

对我使用的形式记录源查询生成的SQL查询访问即被过滤的是:

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功能。

这为什么会与本地表一起使用,而不是完全相同表的链接版本?

+0

请告知*查询基础的过滤器*。该查询是表单记录源,下拉字段的控件源,VBA记录集还是其他?此外,还不清楚OR的逻辑,因为您似乎将两个表达式组合起来:LIKE和IS NULL。你有没有在这里正确复制这个? – Parfait

+0

@Parfait查询是表单记录源(添加这也是问题文本)。我检查了副本,它是正确的。 – Rominus

回答

0

问题是OR子句中的LIKE,但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 
+2

* Access显然不必要地添加了'LIKE'* ... MS Access如何添加它?您作为设计师更新包括记录资源的表单。 – Parfait

+0

@Parfait嗯,回顾一下查看查询的设计视图,看起来似乎手动输入了'LIKE'的代码。自从我用原生表格设计原稿以来,这已经足够长了,我不记得任何一种方式。我将编辑我的答案以删除该部分。 – Rominus

相关问题