您无法真正设计一个适用于 name1 到 name5 列的表单。
Access 是一个数据库,而不是电子表格。因此,在处理数据时,您使用的是数据行,而不是数据列。
因此,请制作一个包含您要选择的名称的表格。
Outfall_ID |姓名。
您的表格将有两列,如上所示。然后,您可以构建一个表单,并驱动一个基于上表的组合框(或列表框)。这将显示一个允许您选择名称的列表或组合框。
在此表单的组合框(或列表框)下方,您可以使用一个按钮来启动您的报告。您可以按所选名称过滤报告,如下所示:
DoCmd.OpenReport "rptOutfalls", acViewPreview, , "outfall_ID = " & Me.MyComboBox
以上将按给定(选定的)outfall_ID 过滤报告。
如果您需要根据您在组合框(或列表框)中选择的实际文本名称过滤报告,我们假设组合框同时显示 outfall_id 和名称。所以名称是组合框的第二列。
如果我们要按所选名称过滤报告,那么 openreprot 命令将如下所示:
DoCmd.OpenReport "rptOutfalls", acViewPreview, , "outfallName = '" & Me.MyComboBox.column(1) & "'"
因此,上述报告现在将仅过滤到您在组合框中选择的名称。
编辑
编辑:
SQL 无法将列转换为不同的列。您需要规范化数据,因此可以使用 SQL 完成此类更新。
因此,您的表格必须如下所示:
mytrans
ID Myset SetID TranslateTo
1 Name1 1 A
2 Name1 2 B
3 Name1 3 C
4 Name2 1 X
5 Name2 2 Y
6 Name2 3 X
因此,您的组合框将基于此查询:
select distinct MySet from myTrans
您根据上述“翻译” ID 的 sql 将是
Select ID, Field1, Field2, outfall_ID,
(select TranslateTo from mytrans
where mytrans.SetID = outfall_id and myset = 'Name1’) as outfallText
from theDataTable