目标是创建一个查询表中定义为“事件”的所有对象的表单。该查询在表单上显示为列表框。我希望 Access 此表单的用户能够选择该查询的对象,然后通过从第二个列表框中选择操作来更新表,然后单击提交按钮。
我认为点击 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
这几乎对我有用,但是我缺少从列表框中选择对象的代码行。现在,一旦单击操作并提交,我只更改表中的第一条记录。不是想要的那个。关于如何修改所选对象有什么建议吗?
最佳答案
假设您的第一个列表框绑定(bind)到屏幕截图(隐藏在表单上)的唯一键 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 项为条件的查询,仍然假设列表框的值绑定(bind)到隐藏 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
关于ms-access - 使用表单更新列表框中的查询对象。 (MS-Access),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51198296/