编译/语法错误:运行时错误3075:查询表达式中的语法错误

时间:2017-02-16 14:54:53

标签: sql ms-access access-vba runtime-error

我正在使用Access 2016 VBA。所有代码都可以正常工作,否则。

(PopUpReminders.Employee)

出现的错误是(完全复制)

  

MS VB运行时错误3075:查询表达式中的语法错误   '(((PopUpReminders.ReminderCompletion)= False)并且   ((PopUpReminders.ReminderStartDate)< = Now()和((PopUpReminders.Employee)=' rerdeljac'));'。

请注意," rerdeljac"是在Forms![Login]![txtUserName]上输入文本框的logintext,它与PopUpReminders.Employee匹配;请注意,错误消息不包括SQL代码的其余部分。

Forms![Login]![txtUserName]是表格中仅包含文字的字段,Set rs = db.OpenRecordset(strSQL)是表单上的文本框,仅用文字字符填充。

错误发生在var value = Date.UTC(2015, 10, 5); chart.xAxis[0].addPlotLine({ value: value, color: "green", width: 1, dashStyle: 'ShortDash', label: { text: "this appeared outside of the current view!", align: 'left', y: 5, x: 3, style: { fontSize: "12px" } }, zIndex: 10 }); var range = 1000 * 3600 * 24 * 30; chart.xAxis[0].setExtremes(value - range, value + range) 行。

2 个答案:

答案 0 :(得分:1)

如果我正确的话,你的陈述需要AuthenticationResult )。您的SQL语句过于复杂(可能是因为您从使用GUI创建的查询中复制了它)。这就足够了:

Now()

如果您的某位用户决定在"SELECT * FROM PopUpReminders WHERE ReminderCompletion=False AND ReminderStartDate<=Now() AND Employee='" & Forms![Login]![txtUserName] & "'" 中输入' (single quote),则会失败。您至少应将其更改为txtUserName

Replace(Forms![Login]![txtUserName],"'","''")也不可靠。您应该使用RecordCount检查是否有任何记录被返回,并使用rs.EOF=False OR rs.BOF=Falsers.MoveFirst进行迭代。

答案 1 :(得分:0)

实际上,这是Fionnuala删除列名和SunKnight0在Now()之后添加括号的组合,它解决了这个问题。我无法回答这两个问题,而且SunKnight超越了所以他得到了标记。以下是修正后的代码,适用于将来可能需要它的人:

strSQL = "SELECT PopUpReminders.* FROM PopUpReminders WHERE (((PopUpReminders.ReminderCompletion)=False) AND ((PopUpReminders.ReminderStartDate)<=Now()) AND ((PopUpReminders.Employee)='" & Forms![Login]![txtUserName] & "'));"