在MS Access 2010中,我正在构建更新查询(使用查询设计器)。 我想在运行时传递列的名称作为变量更新。
我尝试编写SQL并在VBA中运行查询。这似乎是最简单的方法......但是完成更新的SQL变得非常混乱。我更喜欢在查询生成器GUI中执行此操作。 有可能吗?
到目前为止,我尝试在查询构建器中输入字段名称:
expr1:[field_name]
虽然Access提示我输入“Field_name”,但这会导致“无法更新'field_name';字段无法更新。
另外,我尝试了这种方法:
Expr1: "'" & [field_name] & "'"
导致“'”& [field_name]& “'”不是有效名称;检查标点..等等
下面是我正在尝试构建的查询的屏幕截图。
答案 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 ........"
答案 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