使用表单更新列表框中的查询对象。 (MS-Access)

时间:2018-07-05 19:05:56

标签: vba ms-access access-vba

目标是创建一个表格,该表格已查询定义为“活动”的表的所有对象。该查询在表单上显示为列表框。我希望访问此表单的用户能够选择该查询的对象,然后通过从第二个列表框中选择操作,然后单击提交按钮来更新表。

视觉上: enter image description here

我认为单击的VBA如下所示:

Private Sub ActionAdminbtn_Click()
Set Actiontbl = CurrentDb.OpenRecordset("SELECT * FROM [Actiontbl]")
Actiontbl.Edit
Actiontbl![Progress] = Me.AdminActionSelect
Actiontbl.Update
Actiontbl.Close
Me.Refresh
End Sub

这几乎对我有用,但是我缺少从列表框中选择对象的代码行。现在,单击操作并提交后,我只更改表中的第一条记录。不是想要的。关于如何修改所选对象的任何建议?

在下面进行编辑以包含更多内容: 这是我要编辑的表格。 enter image description here

2 个答案:

答案 0 :(得分:2)

假定您的第一个列表框已绑定到屏幕快照(隐藏在表单中)的唯一键ID(ID),请考虑使用带有WHERE子句的更新SQL查询。下面演示了使用QueryDef对象调用的参数化查询。

SQL (另存为存储的查询)

PARAMETERS [ProgressParam] TEXT(255), [ActionIDParam] Long;
UPDATE [Actiontbl] SET [Progress] = [ProgressParam]
WHERE ID = [ActionIDParam]

VBA

Private Sub ActionAdminbtn_Click()
    Dim qdef As QueryDef

    Set qdef = CurrentDb.QueryDefs("myUpdateQuery")
    ' BIND PARAMS
    qdef![ProgressParam] = Me.AdminActionSelect
    qdef![ActionIDParam] = Me.FirstListBoxName

    ' EXECUTE ACTION
    qdef.Execute dbFailOnError

    Set qdef = Nothing

    Me.Requery
End Sub

或者,如果您希望使用Recordset Update方法,请以条件为 ActionID 的条件打开查询,但仍假定列表框的值绑定到隐藏的ID字段。

Private Sub ActionAdminbtn_Click()
   Dim strSQL As String
   Dim Actiontbl As Recordset

   strSQL = "SELECT * FROM [Actiontbl] WHERE ID=" & Me.FirstListBoxName

   Set Actiontbl = CurrentDb.OpenRecordset(strSQL)

   Actiontbl.Edit
   Actiontbl![Progress] = Me.AdminActionSelect
   Actiontbl.Update
   Actiontbl.Close

   Set Actiontbl = Nothing

   Me.Refresh
End Sub

答案 1 :(得分:0)

尚不清楚您的ListBox控件的名称,但假设ListBox是名称:

Dim iSel As Integer

iSel = ListBox.Value

这将为您提供列表框的选定行。那么您可能可以使用记录集更新方法,也可以使用更简单的RowSource更新。

对于任何具体建议,我们需要查看所涉及表的示例数据和列名。

注意:使用ID密钥字段,这些类型的更新要容易得多。