【问题标题】:Access variable Field Names访问变量字段名称
【发布时间】:2012-11-26 19:10:14
【问题描述】:

在 MS Access 2010 中,我正在构建一个更新查询(使用查询设计器)。 我想在运行时将要更新的列的名称作为变量传递。

我尝试过编写 SQL 并在 VBA 中运行查询。这似乎是最简单的方法......但是完成更新的 SQL 变得相当混乱。我宁愿在查询生成器 GUI 中执行此操作。 有可能吗?

到目前为止,我已经尝试在查询构建器中输入字段名称:

expr1:[field_name]

虽然 Access 提示我输入“Field_name”,但这会导致“无法更新 'field_name';字段不可更新。

另外,我试过这个方法:

Expr1: "'" & [field_name] & "'"

导致 "'" & [field_name] & "'" 不是有效名称;检查标点符号..等

下面是我正在尝试构建的查询的屏幕截图。

【问题讨论】:

  • 这可能为时已晚,但我建议重新设计您的数据库 - 您有 Employee1Hours、Employee2Hours 等等,这似乎与数据库的关系优势背道而驰。如果这些是不同员工的工作时间,它们应该只保存在 2 个字段中 - 一个用于员工编号,一个用于他们工作的小时数。然后,您可以执行简单的任务,例如汇总员工 1 的所有小时数

标签: ms-access ms-access-2010


【解决方案1】:

Access 的数据库引擎不允许您使用参数作为UPDATE 语句的目标字段的名称。

如果您尝试使用用户定义的函数而不是参数来提供字段名称,结果将是相同的……不高兴。

似乎 db 引擎在执行 SQL 语句时不会解析对象名称。该限制不仅适用于字段名,也适用于表名。 IOW,以下查询将失败并显示错误消息“找不到输入表或查询'给我一个表名'”。

SELECT *
FROM [give me a table name];

虽然这与您的情况不完全相同,但我怀疑原因可能是这样。 db 引擎在计划/执行查询时解析对象名称过于有限。

【讨论】:

  • 我明白了。感谢您的澄清。我现在已经花了相当长的时间来操作对象,希望找到一种方法来实现结果。没有一个是成功的。我怀疑你的回答是完全正确的。
【解决方案2】:

也许最好的方法是使用 SQL,构建提示,然后将这些值分配给 VBA 中的变量,然后将变量值添加到 SQL 中。

所以沿着这些思路。您使用更新查询但逻辑相同

Dim SQL as string
dim **FieldName** as string

SQL = "Select [table]![" & Chr(34) & **FieldName** & Chr(34) & "] from ........" 

查看Here for SQL building tips

【讨论】:

    【解决方案3】:

    我经常使用这种方法 - 我知道这是一篇很老的帖子,但希望这对某人有所帮助 - 以大卫所说的为基础:

    Sub CreateQuery
    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim strSQL As String
    Set dbs = CurrentDb
    Set qdf = dbs.CreateQueryDef("NameOfNewQuery")
    strSQL = "Select " 'notice the space
    strSQL = strSQL & "FROM " 'notice the sapce
    strSQL = strSQL & "WHERE;"
    qdf.SQL = strSQL
    qdf.Close
    Set qdf = Nothing
    Set dbs = Nothing
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2012-11-22
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多