2009-06-08 34 views
0

我在Access中有兩個查詢。它們都是中等難度的創建,但是在過程結束時,它們具有相同數量的相同數據類型的字段。他們都獨立工作,產生了預期的結果。聯合查詢引發'空使用無效'異常

不幸的是,

SELECT * 
FROM [qry vaBaseQuery-S2] 
UNION ALL SELECT * 
FROM [qry BaseQuery]; 

拋出兩個 '無效使用空的' 的錯誤,一前一後。我在使用空值的Access 2000查詢之前沒有問題地使用聯合,所以我有點難住。任何人都可以提出可能發生的事情嗎?

可能有關的更多信息:

  • 無論查詢中有任何空白行

  • UNION SELECT *(不帶ALL)拋出了同樣的錯誤,但只有一次?

編輯:

  • 使用字段名稱,而不是*沒有幫助

EDIT2:

  • 鑑於查詢將是一個化妝臺查詢從窗體運行,我只是將它作爲兩個單獨的查詢(一個表和一個append),並依次觸發這兩個查詢。鑑於下面的答案,這聽起來要比試圖找出Access反對的東西要少得多。
+0

任何機會我們可以看到其他兩個查詢中的任何一個? – BIBD 2009-06-08 14:18:33

+0

每個查詢都由至少6個子查詢組成。在兩年的生命週期中,一張印刷的表格變成了一張電子表格,它變成了一個Access數據庫(由沒有Access經驗的人員),然後通過兩個不同的團隊。在每個階段,收集的數據都會改變。然後有人給我們說:嘿,你爲什麼不將所有數據映射到一個基本查詢中,以便我們可以在整個數據集上運行報告?是的,沒錯。真的很煩人的事情?從一張乾淨的紙上解決原始問題是微不足道的。 – mavnn 2009-06-09 11:59:11

回答

0

如編輯問題中提到:由於查詢將是從形式運行反正生成表查詢,我剛剛離開它作爲兩個單獨的查詢(一個化妝臺和一個追加),並觸發序列兩種。

2

您的源查詢中最有可能具有一些條件(Iif())數據轉換(CStr()或類似)。訪問可以不同於聯合來優化單獨的查詢;有時它會以非常奇怪的順序評估條件部分。

就像在接下來的過於簡單化的情況下:

Select Iif(int_fld is null, '0', CStr(int_fld)) As Something 

這可能會引發「無效使用空的」與否 - 依賴於評估順序。

編輯:忘了寫正確的表達,這並沒有給這個錯誤:

Select CStr(Iif(int_fld is null, 0, int_fld)) As Something 
1

帕特說:「有時[ACE /噴氣]評估了非常怪異的順序條件部件」 - 我可以保證而不僅僅是在使用UNION時。以下是我最近在SO上發佈的內容,其中僅向查詢添加WHERE子句導致引擎以錯誤的順序進行評估,導致「無效過程調用」錯誤,我找不到方法。

SQL for parsing multi-line data?

我建議你從後兩個查詢對象的SQL代碼。也許有人可以發現引擎可能存在的問題。