[英]Compile/Syntax Error: Run-time error 3075: Syntax error in query expression
我正在使用Access 2016 VBA。 否則,所有代碼都可以正常工作。
Public Function PopUp()
Dim strSQL As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
strSQL = "SELECT PopUpReminders.*, PopUpReminders.ReminderCompletion, PopUpReminders.ReminderStartDate, PopUpReminders.Employee FROM PopUpReminders WHERE (((PopUpReminders.ReminderCompletion)=False) AND ((PopUpReminders.ReminderStartDate)<=Now() AND ((PopUpReminders.Employee)='" & Forms![Login]![txtUserName] & "'));"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
'Do Nothing
Else
If rs.RecordCount > 0 Then
Do
DoCmd.OpenForm "SFPopUpReminder"
Loop Until rs!ViewedRecord = True
End If
End If
rs.Close
Set rs = Nothing
End Function
出現的錯誤是(精確復制的)
MS VB運行時錯誤3075:查詢表達式'((((PopUpReminders.ReminderCompletion)= False)和((PopUpReminders.ReminderStartDate)<= Now()和((PopUpReminders.Employee)='rerdeljac')) '。
請注意,“ rerdeljac”是在Forms![Login]![txtUserName]上的文本框中輸入的登錄文本,它與PopUpReminders.Employee相匹配; 另請注意,錯誤消息不包括其余的SQL代碼。
(PopUpReminders.Employee)
是僅填充文本的表格上的字段,而Forms![Login]![txtUserName]
是旨在僅填充文本字符的表單上的文本框。
該錯誤發生在Set rs = db.OpenRecordset(strSQL)
行上。
如果我算對的話,在Now()
之后,您的陳述還需要再加上一個)
。 您的SQL語句過於復雜(可能是因為您從使用GUI進行的查詢中復制了它)。 這足夠了:
"SELECT * FROM PopUpReminders WHERE ReminderCompletion=False AND ReminderStartDate<=Now() AND Employee='" & Forms![Login]![txtUserName] & "'"
如果您的用戶之一決定在txtUserName
鍵入' (single quote)
,則此操作將失敗。 您至少應該將其更改為Replace(Forms![Login]![txtUserName],"'","''")
另外RecordCount
不可靠。 您應該使用rs.EOF=False OR rs.BOF=False
來檢查是否返回了任何記錄,並使用rs.MoveFirst
和rs.MoveNext
遍歷它們。
實際上,這是Fionnuala刪除列名和SunKnight0在Now()之后添加括號的組合,從而解決了該問題。 我不能同時給出答案,SunKnight超越了對手,所以他獲得了分數。 這是更正后的代碼,適用於將來可能需要的人:
strSQL = "SELECT PopUpReminders.* FROM PopUpReminders WHERE (((PopUpReminders.ReminderCompletion)=False) AND ((PopUpReminders.ReminderStartDate)<=Now()) AND ((PopUpReminders.Employee)='" & Forms![Login]![txtUserName] & "'));"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.