访问变量字段名称

时间:2012-11-26 19:10:15

标签: ms-access ms-access-2010

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

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

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

expr1:[field_name]

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

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

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

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

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

a screen cap of the query I am proposing

3 个答案:

答案 0 :(得分:2)

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

如果您尝试用户定义的函数而不是参数来提供字段名称,结果将是相同的......没有快乐。

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

SELECT *
FROM [give me a table name];

虽然这与你的情况并不完全相同,但我怀疑原因可能如此。在计划/执行查询时,db引擎对于解析对象名称的限制太多了。

答案 1 :(得分:1)

也许最好的方法是使用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

答案 2 :(得分: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