Access 2010 VBA参数太少:预期3

时间:2013-07-03 18:01:52

标签: sql ms-access access-vba

在VBA for Access 2010中,我只想尝试将一些数据插入到子窗体中。我有一个表格,上面有3个子表格。我有3个未绑定的文本框,用户将输入数据,点击命令按钮,然后该数据将进入我在布局上的子表单。这是我的代码:

Private Sub cmdAssign_Click()

CurrentDb.Execute " INSERT INTO Crew " _
    & "(txtCrewName,txtKitNumber,txtActionDate) VALUES " _
    & "(txtAssignCrew, txtAssignKit, txtAssignDate);"

End Sub

我知道它必须简单但我对此并不熟悉。 txtCrewName,txtKitNumber和txtActionDate是子格式中我想要数据的空值。而txtAssignCrew,txtAssignKit和txtAssignDate是表单上的unbounds,但在子表单'Crew'之外。有任何想法吗?感谢

编辑:想出来。谢谢大家的帮助

3 个答案:

答案 0 :(得分:2)

因此txtAssignCrewtxtAssignKittxtAssignDate是表单上控件的名称。数据库引擎不知道它们是什么,所以假设它们必须是参数。

您可以将这些控件的(而不是控件的名称)构建到INSERT语句中。但请考虑实际的参数查询,并从QueryDef对象执行它。

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strInsert As String

strInsert = "PARAMETERS crew_name Text(255), kit_num Long, action_date DateTime;" & vbCrLf & _
    "INSERT INTO Crew (txtCrewName,txtKitNumber,txtActionDate)" & vbCrLf & _
    "VALUES (crew_name, kit_num, action_date);"
Debug.Print "strInsert:" & vbCrLf & strInsert
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", strInsert)
qdf.Parameters("crew_name") = Me.txtAssignCrew
qdf.Parameters("kit_num") = Me.txtAssignKit
qdf.Parameters("action_date") = Me.txtAssignDate
qdf.Execute dbFailOnError
Set qdf = Nothing
Set db = Nothing

注意,在PARAMETERS子句中,我假定文本为txtCrewName的数据类型,txtKitNumber为长整数,txtActionDate为日期/时间。如果所有都是文本,请调整PARAMETERS子句。

答案 1 :(得分:1)

这应该有效,假设txtAssignCrew,Kit和Date是您要插入的未绑定控件。要意识到如果这些字段中有单引号或任何内容,则会导致语句失败,因此您需要将它们转义。

 Private Sub cmdAssign_Click()

 CurrentDb.Execute " INSERT INTO Crew " _
  & "(txtCrewName,txtKitNumber,txtActionDate) VALUES " _
  & "('" & me.txtAssignCrew & "', '" & me.txtAssignKit & "','" & me.txtAssignDate & ");"

 End Sub

我可能会引用一句话。

答案 2 :(得分:1)

更正后的代码: CurrentDb.Execute“INSERT INTO Crew”_     &安培; “(txtCrewName,txtKitNumber,txtActionDate)VALUES”_     &安培; “('& txtAssignCrew&”','“& txtAssignKit&”','“& txtAssignDate&”);“

注意: - 您可能需要更改AssignDate参数的格式 - 数据库中的列名通常不以txt为前缀 - 最好使用参数化查询来避免SQL注入攻击