【问题标题】:Auto fill form fields in MS Access using VBA使用 VBA 在 MS Access 中自动填写表单字段
【发布时间】:2020-03-29 07:12:25
【问题描述】:

提前感谢您的帮助。 这涉及到一点 VBA 代码和三个 MS Access 表。
1)SR。技术官 (tblSTO),
2) tblProjects,
3) tblDeliverables.
在其他字段中,STO 表具有自动编号 STO_ID(主索引)和 STO_Name(文本)。
tblProject 表具有 ProjectNo(文本)和 STO_ID。这两个组合是唯一的,并且是主键。
tblDeliverables 表有 ProjectNo、STO_ID、ServiceName(文本)。这三个组合是唯一的并且是主键。

我有一个 qryDeliverable 查询,其中包括所有三个表和每个表中的所有字段。我有一个表单 frmDeliverable,它使用 qryDeliverables 作为记录源,并且有一个组合框字段可以从 Project 表中选择 ProjectNo。 ProjectNo、STOName(来自 STO 表)显示在组合框下拉列表中。

选择 ProjectNo 后,我希望显示 qryDeliverables 中的 ProjectNo、STOName 和其他几个字段,以及我尝试在“更新后”事件中使用一些 VBA 填充的字段 (DesignerPlanner)。它不工作。根据我使用关系和 VBA 代码的方式,它要么不填充字段,要么表单的添加记录控件消失,或者出现一些关系错误。

一点历史......当在 Project 和 Deliverable 表中使用自动编号 ID 字段(主索引)时,我可以完美地工作。但是,出现了一项新要求,即能够通过从记录电子表格中导入来预填充(一次)可交付成果表。在已填充项目文件的情况下,要导入到可交付成果表中的电子表格具有唯一的项目编号 (ProjectNo) 和所有记录中的通用 STO_ID(仅作为起点),但不可能有每个项目 ID 编号,所以没有满足索引要求。我不得不从 Deliverables 表中删除项目 ID 字段,并使用 ProjectNo 和 STO_ID 组合作为主索引。这是我所有问题的开始。

这是 VBA 代码:

Private Sub Project_No_AfterUpdate()
Dim rs As DAO.Recordset
    Dim qdf As DAO.QueryDef
    Dim strSQL As String
    If Not IsNull(ProjectNo) Then
        Set rs = CurrentDb.OpenRecordset("qryProjects")
        Me.STO_ID = rs!STO_ID
        Me.DesignerPlanner = "Chiu, Derek;"
    End If
End Sub

我希望这很清楚,并感谢任何帮助。非常感谢!

【问题讨论】:

  • 我还更改了对问题的描述,以便更准确地显示来自 qryDeliverable 的字段,而不是来自项目表的字段。对不起,谢谢!
  • 一个表单应该只为一个表进行数据输入/编辑。您可能应该使用表单/子表单排列,而不是在一个表单 RecordSource 中包含所有表。
  • 您真正想要完成什么?您只需要对现有记录应用过滤器,还是需要使用来自可交付成果导入的新数据填充 tblProjects?
  • 我不想编辑/添加数据到多个表,我只想显示来自多个表的数据。该表单具有可交付成果表的来源,该表存储项目名称。项目名称是对项目表的 cmbx 查找,因此在表单上,​​我想显示 Pelroject 记录中的其他字段。项目记录包含一个 STO_ID 字段,它是 STO 表的链接。在同一个表单上,我还想显示 STO 表中的字段。因此,在“可交付成果”表单上,我想选择一个链接到 STO 的项目并显示两个表中的字段。
  • 真的不需要代码来显示表格中的数据。如果您有表格 RecordSource 表格,则将文本框绑定到这些字段。但是,只允许编辑表单所针对的表中的字段,而不是相关的“查找”表。依赖表应该在一个子表单中。

标签: vba ms-access


【解决方案1】:

我会建议你做以下事情

  1. 在表单上创建一个组合框控件,在其控件源中,使用选择查询将显示您要检索记录的各个表中的所有列名

2.在 Column count 属性下,这将是 select 语句检索到的列数

  1. 为除第一列之外的所有检索到的列创建文本字段(这是因为第一列将由组合框处理)
  2. 在组合框的更新后事件下,执行类似 text7.Value=combo13.Column(1) 的操作,其中 text7 是文本框名称,列 (1) 是组合框选择语句中的第二列. text8.Value=combo13.Column(2) 其中 text8 是文本框名称,column (2) 是组合框的 select 语句中的第三列。

等等

【讨论】:

  • 谢谢!一旦我在一个月内重返工作岗位,我将尝试这个。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多