这已经很老了,但它可能会帮助其他人。我确实想出了一个方法来完全按照你的要求做
我只有 2016 年的访问权限,所以事情可能在不同的地方,但不是那么多。首先,为每个牌组创建所有表。确保您在第一列中有:唯一 ID,第二列是牌组的名称(该牌组中的每个条目都将相同),这将对我们有所帮助。第三列是卡的名称。其他列将包含您卡的其他值,但对于我的示例而言,这并不重要。我会这样命名它们
column name
1 unique_ID
2 DeckName
3 CardName
现在,在“创建”选项卡中选择“查询设计”。然后在“视图”部分的“主页”选项卡中,选择 SQL。在空白部分输入这个我有 2 个表:Table1 和 Table2
SELECT Table1.DeckName FROM Table1 UNION SELECT Table2.DeckName FROM Table2;
您必须添加每个表并在每个表之间添加一个UNION。你只用一个半昏迷结束这句话;
点击运行,你应该得到所有的 DeckName。保存您的查询并关闭它。
现在,我们希望组合框帮助我们在不同的牌组之间进行选择。在“创建”选项卡中选择“空白表格”。转到“主页/视图”选择“设计”。在“设计”选项卡中,选择组合框。您可以单击取消并跳过向导 在属性中,单击“行源”并选择您创建的查询。将其命名为Cmb_Deck
添加第二个组合框,将其命名为Cmb_Name。属性“ Column Count ”放“2”,因为这个组合框将显示卡片的名称,即我们表格中的column2。为了有点花哨,我们将隐藏第一列,在“ Column Widths ”属性中放置“ 0";1" "(第一列 0 英寸,第二列 1 英寸)。
将您创建的任何表拖到表单中,并在向导出现时单击取消。将其命名为TableResult
现在布局已创建,我们需要根据组合框Cmb_Deck更改表格。在Cmb_Deck属性中,进入事件部分并选择“更新后”单击“ ... ”并选择代码生成器 在此 Visual Basic 编辑器窗口中:删除所有内容并输入
Option Compare Database
Private Sub Cmb_Deck_AfterUpdate()
TableResult.SourceObject = "Table." & Cmb_Deck.Value
Cmb_Name.RowSource = "Table." & Cmb_Deck.Value
End Sub
Private Sub Cmb_Name_AfterUpdate()
Me.TableResult.Form.Filter = "([" & Cmb_Deck.Value & "]." & "[CardName]=""" & Cmb_Name.text & """)"
Me.TableResult.Form.FilterOn = True
End Sub
现在重新访问,选择您的组合框 Cmb_Name 并进入属性 event/afterupdate 并选择“ [Event Procedure]
现在在您的表单中,转到主页/视图并选择表单视图。首先在第一个组合框中选择一副牌,然后在第二个组合框中选择一张牌的名称。现在下面的表格只显示您想要查看的卡片。
我希望这有帮助
——马修·帕奎因