VBA访问从级联列表框传递和编辑记录并重新查询列表框

Posted

技术标签:

【中文标题】VBA访问从级联列表框传递和编辑记录并重新查询列表框【英文标题】:VBA Access Passing and editing a record from a cascade listbox and requerying the List box 【发布时间】:2013-12-12 19:57:37 【问题描述】:

我有一个特别难处理的问题。 我正在制作访问表格。这种形式包含大量的级联数据连接。 它用作数据库的过滤、选择、审查和编辑界面。

下面我已经包含了设计的基本描述; -ComboBox1 从参考表中填充其数据,并级联更新到 ComboBox2。 -ComboBox2 基于对 ComboBox1 的选择进行填充,然后将信息级联到 ListBox1,ListBox1 运行查询以生成记录列表。 - 在 Listbox1 中选择一条记录会将列表的各种隐藏列填充到匹配的文本和组合框字段中以进行显示/编辑。它还通过单击级联填充 Listbox2,使用查询从不同的表中提取与 ListBox1 中选定记录相关的记录。 - 我有许多按钮来处理添加、删除和编辑 ListBox1 从中查询其信息的表的记录。 到目前为止一切正常(部分感谢回答我其他问题的人的帮助) 我现在卡住的地方是尝试创建类似的按钮,这些按钮与 ListBox2 绘制其记录的表提供相同的功能(添加/编辑/删除) 我已经成功添加了添加按钮,但是卡在了编辑功能上。

我有一个按钮,我正在尝试为其构建“OnClick”事件。它需要从列表框中提取选定的记录,并将它打开的表单设置为该特定记录。 我知道我可以使用 listbox.selected.value 从列表框中提取选定的值,但这如何转化为 DoCmd.OpenForm 语法?

【问题讨论】:

【参考方案1】:

您要调整的 DoCmd.OpenForm 参数是可选的 WhereConditionDataModeWhereCondition 接受不带 where 字样的 SQL Where 子句。此限制在表单打开之前应用于表单的行源。 DataMode 可以覆盖表单保存的 AllowEdits 和 DataEntry 设置。听起来您想在这种情况下使用 acFormEdit。

Private Sub CommandFoo_OnClick()
Dim strWhere As String

'Do yourself a favor and build the WhereCondition in a string variable so that you can see what you've built. 
'Surround text values in double quotes. 
'Surround dates with # and specify in m/d/yyyy or yyyy-mm-dd
'Make sure you build in spaces in as necessary.
strWhere = "NumberField1=" & ListBox1.Columns(0) & " AND TextField2=" & Chr(34) & ListBox1.Columns(1) & Chr(34)
Debug.Print strWhere

DoCmd.OpenForm FormName:="YourFormName", WhereCondition:=strWhere, DataMode=acFormEdit
End Sub

【讨论】:

好的,我正在尝试让它工作,但我有语法错误;我可以通过代码审查来更正语法吗? strWhere = "ForcastTrans.TransID = " + '" & me.lstTrans.Column(0) & "' 如果 TransID 是数字,则使用 `strWhere="TransID=" & Me.lstTrans.Column(0) 如果TransID 是数字,则使用strWhere="TransID=" & Me.lstTrans.Column(0)。如果TransID 是文本,请使用strWhere="TransID=" & Chr(34) & Me.lstTrans.Column(0) & Chr(34)。您可能必须将零更改为列表框行源的从零开始的列号。 谢谢我弄明白了。非常感谢您的帮助。

以上是关于VBA访问从级联列表框传递和编辑记录并重新查询列表框的主要内容,如果未能解决你的问题,请参考以下文章

在基于非绑定列重新查询后访问 VBA 还原列表框选择

访问 VBA - 使用组合框(多值字段)时类型不匹配

Access 2016 VBA .FindFirst 在记录集中找不到记录

访问 VBA - 使用 VBA 的 SQL 语句使用文本框组合框值在表单上填充列表框 OR

通过在列表下拉组合框中选择它来访问 VBA 代码以转到另一个表单上的特定记录

使用 vba 在访问查询中传递参数值