【发布时间】: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 表格,则将文本框绑定到这些字段。但是,只允许编辑表单所针对的表中的字段,而不是相关的“查找”表。依赖表应该在一个子表单中。