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列。
谁能告诉我如何处理这个问题?
答案 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