在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'之外。有任何想法吗?感谢
编辑:想出来。谢谢大家的帮助答案 0 :(得分:2)
因此txtAssignCrew
,txtAssignKit
和txtAssignDate
是表单上控件的名称。数据库引擎不知道它们是什么,所以假设它们必须是参数。
您可以将这些控件的值(而不是控件的名称)构建到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注入攻击