ACCESS/SQL-参数太少

ACCESS/SQL-参数太少,sql,database,ms-access,Sql,Database,Ms Access,我正在使用下面的代码在“transactions表”中创建一个新记录。insert语句的第二行抛出了一个错误:参数太少。我仔细检查了一下,所有的字段名都是正确的。还有什么会导致这种类型的错误 ' Modify this line to include the path to Northwind ' on your computer. Set dbs = CurrentDb Dim vblCustomerID As String Dim vblMealType As String Dim Cha

我正在使用下面的代码在“transactions表”中创建一个新记录。insert语句的第二行抛出了一个错误:参数太少。我仔细检查了一下,所有的字段名都是正确的。还有什么会导致这种类型的错误

' Modify this line to include the path to Northwind
' on your computer.
Set dbs = CurrentDb

Dim vblCustomerID As String
Dim vblMealType As String
Dim Charge As Currency
Dim vblDate As String
vblDate = Format(Date, "yyyy-mm-dd")
txtCustomerID.SetFocus
vblCustomerID = txtCustomerID.Text

txtMealType.SetFocus
vblMealType = txtMealType.Text

txtCharge.SetFocus
vblCharge = txtCharge.Text

dbs.Execute "INSERT INTO dbo_Transactions" _
    & "(CustomerID, MealID, TransactionAmount, TransactionDate) VALUES " _
    & "(" & vblCustomerID & ", " & vblMealType & ", " & vblCharge & ", " & vblDate & ");"
dbs.Close

是否有任何加载到vbl字段中的文本字段包含以下特殊字符

, ' " 
在一个非常好的SQLINSERT命令中,文本字段中的所有内容都可能会把事情搞砸,我打赌这就是这里发生的事情

如果您在这里实际使用参数,而不是将文本框中的文本直接加载到SQL查询中,这会更好,因为您正在向SQL注入敞开大门。如果有人打字呢

"; Drop Table dbo_Transactions;
在其中一个文本框中运行此查询?因为有人刚刚删除了你的一个表,所以你的数据库就完全搞砸了

一些关于使用参数来防止此问题的信息链接,我敢打赌这也会解决您遇到的参数太少的问题


正如其他人所建议的那样,使用参数化查询是一种更好的方法来完成您正在尝试的操作。试着这样做:

Dim qdf作为DAO.QueryDef
设置qdf=dbs.CreateQueryDef(“”_
参数PRMCustomeId Long、PRMMalid Long、prmTransactionAmount Currency、prmTransactionDate DateTime;&_
“插入dbo_事务(CustomerID、MealID、TransactionMount、TransactionDate)”&_
“值([PRMCustomeId]、[PRMMAlid]、[prmTransactionAmount]、[prmTransactionDate])”
qdf!prmCustomerID=txtCustomerID.Value
qdf!prmmalid=txtMealType.Value
qdf!PRM交易金额=txtCharge.Value
qdf!prmTransactionDate=日期()
qdf.executedbfailonerror
设置qdf=无

执行SQL时请使用;否则,您极易受到SQL注入攻击。这也可以解决您的问题。我强烈建议您更改代码,以便首先创建SQL字符串并将其分配给变量,然后dbs.执行该变量。通过这种方式,您可以在变量处放置断点,并查看Access认为SQL字符串是什么。大多数时候,Access认为它是什么和您认为它是什么完全不同。您确定所有变量都有值吗?