MS ACCESS、VBA SQL插入命令分号问题

MS ACCESS、VBA SQL插入命令分号问题,sql,vba,ms-access,Sql,Vba,Ms Access,我试图用非常有限的知识整理Access中的一些VBA。我已经构建了下面的代码,用于在同一access数据库中的表中进行简单插入 我发现了错误 “SQL语句结尾缺少分号(;)。” 但是我有分号在里面。我只能假设我在某个地方犯了一个新手语法错误,但在花了太长时间尝试之后,我被难住了,任何一个指针都非常受欢迎 Dim StrSQL As String Dim InDate As Date Dim VacNum As String Dim Stage As String InDate = Now()

我试图用非常有限的知识整理Access中的一些VBA。我已经构建了下面的代码,用于在同一access数据库中的表中进行简单插入

我发现了错误 “SQL语句结尾缺少分号(;)。”

但是我有分号在里面。我只能假设我在某个地方犯了一个新手语法错误,但在花了太长时间尝试之后,我被难住了,任何一个指针都非常受欢迎

Dim StrSQL As String
Dim InDate As Date
Dim VacNum As String
Dim Stage As String

InDate = Now()
VacNum = Me.Vacancy_No
Stage = Me.Current_Stage

StrSQL = "INSERT INTO Stage (Vacancy_ID,StageDate,Stage) VALUES ('" & VacNum & "','" & InDate & "','" & Stage & "' );"

DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True

您的语法存在SQL注入的风险,这可能就是您收到此消息的原因

此错误的可能原因是您的一个字段包含一个引号,导致SQL出现故障

正确的解决方案是参数化:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", "INSERT INTO Stage (Vacancy_ID,StageDate,Stage) VALUES (@Value1,@Value2,@Value3 );")
qdf.Parameters("@Value1") = VacNum 
qdf.Parameters("@Value2") = InDate 
qdf.Parameters("@Value3") = Stage 
qdf.Execute

谢谢,效果很好,今天晚些时候我会花一些时间来研究和了解它是如何工作的,我宁愿用正确的方式做事,现在我知道该看什么了。非常感谢您可以回顾,它可能会为您提供更多的见解。此外,关于SQL注入的众多来源之一可能提供一些见解。