2016-08-25 53 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

相關問題