使用 Access VBA 更改表单的记录源

Posted

技术标签:

【中文标题】使用 Access VBA 更改表单的记录源【英文标题】:Use Access VBA to change the record source for a form 【发布时间】:2014-04-08 15:03:22 【问题描述】:

我正在创建一个搜索表单,但我无法在子表单中看到搜索结果。 查询运行良好,我已将子表单记录源设置为查询。我没有收到任何错误。当我单击搜索按钮时,查询会运行,它会在子表单底部的记录选择器中显示行数,但我看不到这些行。

这是我的按钮 OnClick 事件代码:

Private Sub cmdSearch_Click()

Dim tableName As String
Dim colName As String
Dim keyword As String
Dim strSQL As String

tableName = Me.cmbTableNames.Value
colName = Me.cmbColumnNames.Value
keyword = Me.txtKeyword.Value
strSQL = "Select * from [" & [tableName] & "] where [" & [colName] & "] like '*" &  [keyword] & "*';"
Debug.Print strSQL
Me.searchResultsForm.Visible = True

Forms![F_SearchForm]![searchResultsForm].Form.RecordSource = "Select * from [" &   [tableName] & "] where [" & [colName] & "] like '*" & [keyword] & "*';"
Forms![F_SearchForm]![searchResultsForm].Form.Requery
End Sub

谁能告诉我我做错了什么。

谢谢

这是 Debug.Print 的即时窗口中显示的内容

Select * from [dbo_Internal Contacts] where [First Name] like '*Amy*';

我的表单在表单视图中如下所示:

我在子表单中添加了一些文本框(大约 35 个)。现在,如果我运行查询,我的表单如下所示:

如何使用 vba 将子表单上的这些文本框链接到记录源中的列?

请帮忙

【问题讨论】:

您是否有理由不使用本机查询构建器和设计模式属性来设置表单的记录源?在代码中嵌入 SQL 是一种不好的做法,并且(正如您所发现的)会使调试更加困难。 @Tim 我正在尝试创建一个搜索表单,表名和列名是用户选择的组合框中的值。我尝试按原样使用此查询(strSQL)。但是访问并没有让我保存查询,它给了我在表名处无效括号的错误。这就是我选择这条路的原因。 您不能将该代码粘贴到查询中;只需在查询生成器的设计模式下从头开始,然后选择您需要的表,并根据需要在字段之间创建连接。 Debug.Print strSQL 在即时窗口中给出: ------> Select * from [dbo_Internal Contacts] where [First Name] like 'Amy'; blank 子表单不会显示来自记录源的任何值。这是一个关键点......并且不仅限于子表单。 【参考方案1】:

我想通了。这就是我所做的

我将查询修改为

Select * into tmpSearchResults from [" & [tableName] & "] where [" & [colName] & "] like '*" & [keyword] & "*';

我将 tmpSearchResults 作为记录源提供给我的子表单。

每次更新表名组合框时,我都会删除 tmpSearchResults 表。

它按我的意愿工作。

【讨论】:

以上是关于使用 Access VBA 更改表单的记录源的主要内容,如果未能解决你的问题,请参考以下文章

vba access 2010更新过滤子表单

通过 VBA 设置表单的记录集也是设置其记录源

从 Access 中的另一个子窗体更改子窗体的记录源

有啥方法可以使用 VBA 更改 Microsoft Access 中表单上的 PopUp 属性?

使用 VBA 在 Access 2010 中的表单上显示记录集

如何使用 VBA 从 Access 中的表单更改保存的导出路径?