【发布时间】:2019-12-12 23:08:25
【问题描述】:
所以我在 MS Access 2010 中设置了一个数据库(第一次这样做)。我似乎无法正确理解 SQL 语句的语法。我想将我输入的数据输入数据输入表单,并将新行插入到表中,其中包含该数据。所有这些都在 VBA 编辑器中使用 SQL(只有我可用的代码,所有其他代码都被阻止)
Private Sub Add_Click()
Dim sSQL As String
sSQL = "INSERT INTO Data (Type, Name, Quantity, Amount, Class, Series, Client, Date1, Date2) VALUES " & _
"('" & Me!txtType & "','" & Me!txtName & "'," & Me!txtQuantity & "," & Me!txtAmount & ",'" & Me!txtClass & "','" & Me!txtSeries & "','" & Me!txtClient & "'," & Me!date1 & "," & Me!date2 & ")"
Debug.Print sSQL
CurrentDb.Execute sSQL
End Sub
所以当我从 VBA 编辑器运行代码时出现以下错误:
“运行时错误‘3134’:
INSERT INTO 语句中的语法错误。"
并且 SQL 语句的打印输出看起来是正确的:
INSERT INTO Data (Type, Name, Quantity, Amount, Class, Series, Client, Date1, Date2)
VALUES ('Purhcase', 'TV', 500, 100, '', '', ' Bob', 05.08.2019, 05.08.2019)
【问题讨论】:
-
您需要将日期
05.08.2019括起来,并用引号将'05.08.2019'视为符合ISO 标准的'2019-08-05'。 -
我也试过加引号,但我仍然得到同样的错误。当我加上引号时,我什至将数据列的格式设置为文本,但仍然出现错误。由于日期来自表单,因此格式必须是定义的格式之一,所以我选择了 Short Date
-
顺便说一句,不要使用串联来替换您的参数,而是更喜欢使用占位符,尤其是针对 SQL 注入。
-
你能举个例子吗,不知道你的意思。我猜你的意思是为
'" & Me!txtType & "'创建占位符? -
您可以在插入语句中尝试
CONVERT(date,'05.08.2019',104)而不是直接05.08.2019。因为正如你提到的,输入格式是固定的。
标签: sql forms ms-access-2010