2013-10-01 75 views
1

當我使用子查詢作爲變量之一運行查詢時,出現錯誤3021(「找不到當前記錄」,但存在要找到的記錄)。在MS Access中使用子查詢時出現錯誤3021

下面的代碼:

SELECT thefieldsiwant, etc.etc., 

(SELECT directory.person_name FROM directory INNER JOIN doc ON doc.entity_to=directory.entity_id) AS receiver, 

(SELECT directory.person_name FROM directory INNER JOIN doc ON doc.entity_from=directory.entity_id) AS sender 

FROM doc; 

ENTITY_ID是表 「目錄」 的主鍵。

entity_to和entity_from是表「doc」的外鍵。

基本上我只想讓他的名字出現,如果他是文檔的發件人(和另一個人的名字作爲文檔的接收者),而不是這兩個特定人員的ID。

+0

您可能無法停止該錯誤 - 這是常見錯誤錯誤。如果你不能阻止它,你可以使用錯誤處理來捕獲它。 發回發生錯誤的窗體和事件的更多詳細信息。 – SeeSharp

+0

嗨SeeSharp,事件發生時,我加載表單本身(或甚至只是查詢本身)。我一直在SQL查看器上運行這個代碼,所以它不是真的與表單事件相關。 – sober

回答

0

嘗試將所有內容放在FROM中,如下面的代碼。此外,如果您使用以下某些代碼,則應確保如果其中一個SELECT列爲NULL,Access將返回替換值:

select doc.documentname, 
     reciever.person_name, 
     sender.person_name 
from 
doc 
LEFT JOIN 
    ((SELECT directory.person_name, doc.entity_to FROM directory INNER JOIN doc ON doc.entity_to=directory.entity_id) AS receiver on doc.entity_to = receiver.entity_to) 
LEFT JOIN 
    ((SELECT directory.person_name, doc.entity_from FROM directory INNER JOIN doc ON doc.entity_from=directory.entity_id) AS sender on doc.entity_from = sender.entity_from) 
where dir.entity_id = '[enter id for user]' 
+0

我嘗試這樣做: SELECT docfieldswhatever,receiver.person_name,sender.person_name FROM (( DOC INNER JOIN (SELECT directory.person_name,directory.company_name,directory.entity_id FROM目錄INNER JOIN DOC ON directory.entity_id = doc.entity_to)AS接收器 ON doc.entity_to = receiver.entity_id ) INNER JOIN (SELECT directory.person_name,directory.company_name,directory.entity_id FROM directory INNER JOIN doc ON directory.entity_id = doc.entity_to)AS發件人 ON doc.entity_from = sender.entity_id ); 但有些條目會自我複製。 – sober

+0

基本上,我只是想要一個查詢,它會在給定每個記錄的文檔中的人員ID的情況下從目錄中執行類似於dlookup的操作。 – sober

+0

我試圖避免必須通過表單進行查找,但這就是爲什麼我只是在執行SQL語句。 :( – sober