[英]Syntax Error (Missing Operator) In Query Expression "
尝试编写一个SQL查询,其中我使用内部联接从一个表中获取数据并在另一个表中显示匹配的内容,但是在查询表达式“”中收到错误“语法错误(缺少运算符)”。这是错的,但是我插入了我正在使用的代码,对我来说似乎正确。
顺便说一句,该代码已作为VB程序的一部分编写,因此,除了SQL代码外,还有其他代码。
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [classes] INNER JOIN [students] ON classes.StudentForename = students.Forename AND ON classes.StudentSurname = students.Surname AND ON classes.TeacherName ='" & personloggedon.Text & "' AND ON classes.Day ='" & System.DateTime.Now.DayOfWeek.ToString & "' AND ON classes.Period ='" & attendance_reg_periodComboBox.Text & "'", con)
同样,我也尝试使用以下代码,但无法正常工作。
Dim cmd as OleDbCommand = New OleDbCommand("SELECT [Forename], [Surname] FROM [classes] INNER JOIN [students] ON classes.StudentForename = students.Forename AND ON classes.StudentSurname = students.Surname AND ON classes.TeacherName ='" & personloggedon.Text & "' AND ON classes.Day ='" & System.DateTime.Now.DayOfWeek.ToString & "' AND ON classes.Period ='" & attendance_reg_periodComboBox.Text & "'", con)
我所有的SQL查询需要做的就是从“类”数据库中获取姓氏和姓氏,只要它们符合给定的条件,然后从所述数据库中获取姓氏和姓氏,然后匹配“学生”数据库。 然后从那里显示在我的程序的datagridview中。
我是SQL编码的新手,所以如果错误特别明显,我谨此致歉! 但是,非常感谢所有帮助。
您的ON太多。 用“与”替换所有“与”。
Dim cmd as OleDbCommand = New
OleDbCommand("SELECT [Forename], [Surname] FROM
[classes] INNER JOIN [students] ON
classes.StudentForename = students.Forename AND
classes.StudentSurname = students.Surname WHERE
classes.TeacherName ='" & personloggedon.Text & "'
AND classes.Day ='" &
System.DateTime.Now.DayOfWeek.ToString & "' AND
classes.Period ='" &
attendance_reg_periodComboBox.Text & "'", con)
您确实要考虑使用参数化查询,以避免注入攻击。
每次连接仅使用一次ON
。
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [classes] INNER JOIN [students] ON classes.StudentForename = students.Forename AND classes.StudentSurname = students.Surname AND classes.TeacherName ='" & personloggedon.Text & "' AND classes.Day ='" & System.DateTime.Now.DayOfWeek.ToString & "' AND classes.Period ='" & attendance_reg_periodComboBox.Text & "'", con)
不过,这是调用SQL的一种非常不寻常(且混乱)的方式。 很难确定是否还有其他问题。 让我知道它是否不起作用,我们将一起解决。
当您在包含(或引用)复杂的SQL字符串的行上收到VBA运行时错误时,很难准确地确定问题所在。
与对任何代码进行故障排除一样,此过程将简化 ,以消除可能的问题。
尝试执行以下过程时,我们将在使用
OpenRecordSet
方法的行上看到运行时错误:Public Function SQLTest() Dim strSQL As String strSQL = "SELECT * FROM tblMain" & _ "ORDER BY [TableID]" Debug.Print strSQL CurrentDb.OpenRecordset strSQL End Function
为了帮助确定问题,我们可以通过添加一行将SQL字符串的值打印到“立即窗口”中的一行来稍微修改代码 。
(使用Ctrl + G查看立即窗口。)
Public Function SQLTest() Dim strSQL As String strSQL = "SELECT * FROM tblMain" & _ "ORDER BY [TableID]" Debug.Print strSQL CurrentDb.OpenRecordset strSQL End Function
现在,看一下输出(在立即窗口中):
SELECT * FROM tblMainORDER BY [TableID] ↗↖
很容易看出,我们在表名和
ORDER BY
子句之间缺少一个空格,该空格很容易修复:strSQL = "SELECT * FROM tblMain " & _ "ORDER BY [TableID]"
- 对于VBA中的SQL语句,这可能是最有用的调试技术 。
MSDN: 使用Access SQL执行联接
TechNet: SQL连接
尝试解决此问题:
Debug.Print "SELECT * FROM [classes] INNER JOIN [students] ON classes.StudentForename = students.Forename AND classes.StudentSurname = students.Surname AND classes.TeacherName ='" & personloggedon.Text & "' AND classes.Day ='" & System.DateTime.Now.DayOfWeek.ToString & "' AND classes.Period ='" & attendance_reg_periodComboBox.Text & "'"
Stop
将该代码放在问题行之前 。 当代码停止时, 按Ctrl + G查看立即窗口。
将SQL复制并粘贴到新的“查询窗口”(在SQL视图中),然后尝试更改为“设计模式”。 查看您是否可以在此处识别错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.