1

在 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 是表单上的无界,但在子表单“Crew”之外。有任何想法吗?谢谢

编辑:想通了。谢谢大家的帮助

4

3 回答 3

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从句。

于 2013-07-03T18:06:59.963 回答
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

我可能搞砸了一个报价。

于 2013-07-03T18:08:34.880 回答
1

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

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

于 2013-07-03T18:10:02.370 回答