DISTINCT不起作用

时间:2010-12-15 16:56:03

标签: sql ms-access ms-access-2003

Ms-Access中的SQL查询

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
             ));

EnteredBy的DISTINCT关键字,EventTypeSelected不起作用。我的意思是,当我使用DISTINCT关键字时,这些列的数据不显示。

EVENTDATE工作正常,但我不明白为什么不显示EneteredBy和EventTypeSelected列。

谁能告诉我如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

可能是查询无法从表单中直接解释为最终数据类型。但是在日期字段中,您将其包装在函数CDATE(...)中。因此,SQL引擎知道结果类型。我建议对其他领域做同样的事情。例如:做一个CAST(...你的表单控件......作为DateTime)和OtherColumn等...我认为Access允许转换,但不是正面的。否则,将表单值预先拉入声明的数据类型变量,并在查询AS OtherColumn中使用THAT变量。

除了@Jack提到的内容之外,您还可以随时返回自己的帐户,查看历史问题,然后点击实际帮助/解决问题的任何答案。有些问题从来没有得到答案,这没关系,只要给予那些有帮助的人。

答案 1 :(得分: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