【问题标题】:Selecting columns for display based on user criterion in MSAccess根据 MS Access 中的用户条件选择要显示的列
【发布时间】:2018-07-25 00:22:44
【问题描述】:

我有一个带有列的访问表

帐户 ID、帐户描述、GL 代码、年份、1 月、2 月、3 月、4 月、5 月、6 月、7 月、8 月、9 月、10 月、11 月、12 月。月份列包含金额。

如果用户在表单上选择 Jan 而不是 Account Id、帐户描述、Gl 代码、年份和 Jan,我想要显示。同样,如果用户选择 2 月而不是 Account Id 帐户描述,则显示 gl 代码、年份和 2 月。其他月份也是如此。

不知道如何做到这一点。据我所知,我们可以过滤行但不能过滤列。

如果有任何可能的解决方案,请提出建议。请注意,我无法更改数据库设计,因为数据是从 ERP 包下载的。

【问题讨论】:

标签: ms-access vba ms-access-2010 ms-access-2007


【解决方案1】:

创建一个动态设置 SQL 的查询:

Dim qd As DAO.QueryDef
Dim SQL As String
Dim MonthName As String

MonthName = "Feb"  ' Month to search.

Set qd = CurrentDb.QueryDefs("YourQuery")
SQL = "Select [GL Code], [year], [" & MonthName & "] As Amount From YourTable"
qd.SQL = SQL    

现在,打开查询或使用查询作为源打开记录集。

仅限 SQL

Select 
    [GL Code], 
    [year], 
    IIf(MonthName = 'Jan', [Jan],
    IIf(MonthName = 'Feb', [Feb],
    IIf(MonthName = 'Mar', [Mar],
    IIf(MonthName = 'Apr', [Apr],
    IIf(MonthName = 'May', [May],
    IIf(MonthName = 'Jun', [Jun],
    IIf(MonthName = 'Jul', [Jul],
    IIf(MonthName = 'Aug', [Aug],
    IIf(MonthName = 'Sep', [Sep],
    IIf(MonthName = 'Oct', [Oct],
    IIf(MonthName = 'Nov', [Nov],
    IIf(MonthName = 'Dec', [Dec])))))))))))) As Amount
From 
    YourTable

【讨论】:

  • 感谢您的回复。是否可以只通过 SQL 查询而不使用 VBA
  • 这似乎可行。我会尝试。如果我将月份名称替换为用户将选择月份的表单上的文本框,则结果将是正确的。谢谢。
  • 你可以使用switch而不是嵌套12个IIFs。这看起来非常复杂,除非你真的喜欢括号。
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2022-12-04
  • 2021-05-05
  • 2021-09-02
相关资源
最近更新 更多