【问题标题】:Why form object doesn't load RecordSource attribute in VBA for Ms Access为什么表单对象不会在 VBA 中为 Ms Access 加载 RecordSource 属性
【发布时间】:2021-02-17 10:19:59
【问题描述】:

我需要以编程方式读取表单的 RecordSource 属性,以了解表单所依赖的表或查询。

经过一些研究,似乎表单对象需要在窗口中实际打开(或隐藏,但打开),以便可以访问某些属性。我整理了以下代码sn-p:

Application.DoCmd.OpenForm "Form1", view:=acDesign, windowMode:=acWindowNormal     
Dim frm as Access.Form
Set frm = Forms("Form1").Form
Debug.print frm.Name            'works ok
Debug.print frm.RecordSource    'prints an empty string
Application.DoCmd.Close AcForm, "Form1" 

我可以看到表单已正确打开,但 RecordSource 属性为空,即使表单是从表中提供的。

会发生什么?我正在使用 .accdb Ms Access 数据库文件。并已压缩数据库,以防数据库损坏,但问题仍然存在。

编辑:表单非常小,我意识到实际上根本没有RecordSource;它只有一个子表单,因为它确实有一个表格,所以确实有一个非空白的 RecordSource。 因此,VBA 正确地为父表单返回了一个空白 RecordSource。毕竟发布的脚本是正确的。感谢您的投入!!

任何提示或方向将不胜感激。提前谢谢你!

【问题讨论】:

  • 有趣。请注意,如果表单有模块,您甚至可以在根本不打开表单的情况下获取 RecordSource:Debug.Print Form_Form1.RecordSource但是: 这样做时会评估 RecordSource,这可能会导致各种副作用(例如 Access 要求参数)。对于简单的 RecordSource,这可以很好地工作。

标签: vba forms ms-access


【解决方案1】:

很可能,RecordSource 是在加载表单时在代码中分配的,可以是表名,也可以是 SQL:

Me.RecordSource = "Select * From SomeTable Order By SomeField"

【讨论】:

    【解决方案2】:

    在设计视图中,您无法以编程方式获取RecordSource。您可以从Property 窗口看到。您必须以正常形式打开它,可能是您希望它以隐藏方式打开。您可以指定WindowMode 以通过DoCmd.OpenForm "Form1", acNormal, , , , acHidden 隐藏打开表单。试试下面的代码。

    Private Sub CmdTest_Click()
    Dim frm As Access.Form
    
    DoCmd.OpenForm "Form1", acNormal, , , , acHidden
    Set frm = Forms("Form1")
    
        Debug.Print frm.Name
        Debug.Print frm.RecordSource
    
    DoCmd.Close acForm, "Form1"
    End Sub
    

    【讨论】:

    • 这是不正确的。甚至会列出 SQL 中的 RecordSource。
    • @Gustav 可能是。我还没有尝试进入design view
    • 我都试过了:view:= acNormal 和 view:=AcDesigns,似乎都可以正常工作。
    • 您是否尝试过像我的回答一样只是更改表单的表单名称。
    • 是的@Harun24HR,您答案中的代码与 acNormal 和 acHidden 参数一起工作得很好。事情最终是我的代码也可以工作,一旦我使用了正确的表单名称(它有一个子表单,但没有 RecordSource)。所以这是我的错误。非常感谢您解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2022-10-26
    • 2014-04-11
    • 2021-04-16
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多