在 MS Access 中查找哪个表单字段指向哪个数据库字段

Posted

技术标签:

【中文标题】在 MS Access 中查找哪个表单字段指向哪个数据库字段【英文标题】:Find which form field points to which database fields in MS Access 【发布时间】:2016-12-05 06:25:07 【问题描述】:

让我解释一下WEIRDEST客户要求,我们正在摸索:

我们有一个 MS Access VBA 应用程序,其中包含数百个表单中的数千个表单字段。

这些表单中的一些字段会填充来自少数表/查询的数据。

表单中的一些其他字段通过查询/直接代码将数据插入到少数表中。

请注意,这些表是链接表到 SQL Server 表。

有没有办法找到哪个表单字段与哪个表格列相关?

因此,我们需要一些工具/宏来执行此操作。

我们如何在 MS Access 中找到哪个表单字段指向哪个数据库字段?

基于@ClintB's answer,我们准备了如下代码。 ctl.ControlSource 中的值似乎并不是指实际的数据库对象:

Sub GetFormFieldToDBFieldMapping()
Dim frm As Object
Dim LiveForm As Form
Dim ctl As control
Dim i As Integer
Dim fso As Object
Dim ctlSource As String
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = fso.CreateTextFile("D:\ControlSources.txt")

    For Each frm In Application.CurrentProject.AllForms

        'To access form controls, open it
        DoCmd.OpenForm frm.Name, acViewDesign
        Set LiveForm = forms(frm.Name)
        For i = 0 To LiveForm.Controls.Count - 1
        Set ctl = LiveForm.Controls.Item(i)
        If ctl.ControlType = 106 Or ctl.ControlType = 111 Or ctl.ControlType = 110 Or ctl.ControlType = 109 Then
        ctlSource = ctlSource & vbCrLf & "Form Name :" & LiveForm.Name & ": Control Name :" & ctl.Name & ": Control Source :" & ctl.ControlSource
        End If
        Next i
        'Do not forget to close when you are done
        DoCmd.Close acForm, frm.Name
    Next

oFile.WriteLine ctlSource
oFile.Close
Set fso = Nothing
Set oFile = Nothing

End Sub

【问题讨论】:

这几乎是不可能的,因为字段可以用在记录集和 DLookup 和函数中,它们又可以用在查询中,可以在其他查​​询中使用别名,并在到达控件之前在表达式中使用作为 ControlSource。 对于绑定到表的标准表单或简单查询,ControlSources 将是字段名称,因此可以通过这种方式找到一些。棘手的部分是捕捉所有事件。我发现的唯一方法是努力工作 - 通过重命名查询并查看发生了什么来蛮力。不太好。您可以使用 SaveAsText 功能将对象保存到文本文件中,这样可以使搜索更容易。 【参考方案1】:

我会做这样的事情。 (不是实际代码)

For each form in db
   For each control in form
       'Write a record to a table stating which formName, controlName and the control.controlSource
   Next
Next

编辑:ControlSource,而不是 RowSource

【讨论】:

有没有办法获取表名?【参考方案2】:

您提出的代码非常棒!这会给你:

表单名称 控件名称 控制源

您唯一需要的是该列即将到达的表名。 由于这些表是链接到 SQL Server 的表,您可以find all the tables with all their columns。

这会给你:

表名 列名

将这两个信息保存在两个 Excel 表中。

对列名执行V-Lookup 以查找表名

【讨论】:

以上是关于在 MS Access 中查找哪个表单字段指向哪个数据库字段的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:从Excel工作簿中选择工作表

在将 MS Access 拆分为 SQL Server 以执行查询后使用哪个引擎

完成某些字段后,使字段在 MS Access 表单中可见

数据表中的 MS-Access 未绑定组合框?

如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?

在 MS ACCESS 中查找完成的字段百分比