3

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

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

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

expr1:[field_name]

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

另外,我尝试了这种方法:

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

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

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

我提出的查询的屏幕截图

4

3 回答 3

2

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

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

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

SELECT *
FROM [give me a table name];

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

于 2012-11-27T19:41:21.397 回答
1

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

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

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

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

在这里查看SQL 构建技巧

于 2012-12-16T03:52:10.050 回答
0

我经常使用这种方法 - 我知道这是一个非常古老的帖子,但希望这对某人有所帮助 - 基于大卫所说的:

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
于 2015-12-04T15:01:03.460 回答