2010-12-15 41 views
0

SQL查詢在MS-訪問DISTINCT不工作

INSERT INTO tblTmpEventLog(TrackingNumber, PartNumber, PartNumberChgLvl, 
          EnteredBy, EventTypeSelected, EventDate) 
SELECT DISTINCT tblRevRelLog_Detail.RevRelTrackingNumber, 
     tblRevRelLog_Detail.PartNumber, tblRevRelLog_Detail.ChangeLevel, 
     [Forms]![frmEventLog_Input]![EnteredBy] AS EnteredBy, 
     [Forms]![frmEventLog_Input]![EventTypeSelected] AS EventTypeSelected, 
     CDate([Forms]![frmEventLog_Input]![EventDate]) AS EventDate 
    FROM tblRevRelLog_Detail LEFT JOIN tblEventLog 
    ON (tblEventLog.PartNumber = tblRevRelLog_Detail.PartNumber) 
    AND (tblEventLog.PartNumberChgLvl = tblRevRelLog_Detail.ChangeLevel) 
WHERE ((([tblRevRelLog_Detail]![RevRelTrackingNumber]) = 
      [Forms]![frmEventLog_Input]![TrackingNumber])) 
    AND ((tblEventLog.PartNumber) NOT IN 
      (SELECT tblEventLog.PartNumber FROM tblEventLog 
       WHERE tblEventLog.EventTypeSelected = 'pn REMOVED From Wrapper' 
       AND tblEventLog.TrackingNumber = 
         tblRevRelLog_Detail.RevRelTrackingNumber 
       AND tblEventLog.PartNumber = tblRevRelLog_Detail.PartNumber 
       AND tblEventLog.PartNumberChgLvl = 
         tblRevRelLog_Detail.ChangeLevel 
      )); 

DISTINCT關鍵字爲EnteredBy,EventTypeSelected不working..I意味着,對於這些列中的數據不顯示,當我使用DISTINCT關鍵字。

EVENTDATE工作正常,但我不明白爲什麼它不顯示EneteredBy和EventTypeSelected列。

誰能告訴我如何處理?

+3

你問14個問題,並選擇一個答案只有33% - 開始選擇你的問題的答案。 – 2010-12-15 16:57:34

+1

如果你需要幫助,你需要顯示整個查詢 – mwolfe02 2010-12-15 17:00:52

+0

@Jack,好吧我會從現在開始... – user397316 2010-12-15 17:03:28

回答

0

這可能是查詢無法直接從表單中正確解釋爲最終數據類型。然而在你的日期字段中,你將它包裝在一個函數CDATE(...)中。所以,SQL引擎知道結果類型。我建議在其他領域也這樣做。例如:做一個CAST(...你的表單控件...作爲DateTime)作爲OtherColumn等...我認爲Access允許投射,但不是正面的。否則,將表單值預拉入聲明的數據類型變量,並在查詢AS OtherColumn中使用THAT變量。

除了@Jack提到的,你總是可以回到你的賬戶,看看你的歷史問題,然後點擊任何實際幫助你解決問題的答案。有些問題從來沒有得到答案,這沒關係,只要給那些有幫助的人。

+0

謝謝...它現在正在工作。我現在將爲我的舊問題選擇答案 – user397316 2010-12-15 17:59:12

+0

將SQL語句中表單控件的任何引用聲明爲參數總是一個好主意。這使得查詢優化器可以做得更好,同時也增強了可靠性(特別是如果任何控件都是空的)。 – 2010-12-19 01:54:05

0

我發現在過去(我不記得這是哪個舊版本的Access),如果您在VBA中設置窗體控件的值,然後在查詢中使用該控件,查詢將不會請參閱您在VBA中設置的值。如果用戶正常編輯控件,則查詢會查看預期值。也許這就是發生在這裏的事情。

要解決該問題,可以聲明一個返回所需值的VBA函數。例如,而不是這樣的:

SELECT ..., Forms!MainForm!TextEntry AS TextEntry, ... FROM ... 

使用本:

SELECT ..., GetTextEntry() AS TextEntry, ... FROM ... 

與此相伴:

Public Function TextEntry() As Variant 
    TextEntry = Forms!MainForm!TextEntry 
End Function 
+0

你不需要函數,強制類型的任何東西都會執行:'SELECT ...,「」&Forms!MainForm!TextEntry' – Fionnuala 2010-12-15 21:19:28

+0

不,我的意思是我看到了以下行爲(可能在Access 97中 - 我無法在Access 2003或2010中重現它):(1)將文本框控件值從X更改爲Y.(2)運行一個依賴於文本框控件值的查詢。 (3)觀察到查詢看到值X而不是值Y.這是很久以前的事了。它可能是在我想到AccessField對象或其他一些怪癖之前。 – phoog 2010-12-15 22:40:16