我有一个包含20多个表的MS Access 2016数据库(* .accdb)。每个表中的字段在表之间略有不同。我没有VBA经验,所以我只坚持下面的SQL查询(已编辑)。
myvar 是我希望在运行脚本时提示的参数,以便输入要应用更改的表。
PARAMETERS
[myvar] TableID;
UPDATE
[myvar]
INNER JOIN
Excel_Data ON [myvar].[Part Number] = Excel_Data.[Part Number]
SET
[myvar].[Value] = '?',
[myvar].Description = Excel_Data.Description,
[myvar].[Ref] = '?'
.
.
.
WHERE
[myvar].Description Is Null;
错误消息:
Too few parameters. Expected 0.
我更喜欢采用上述SQL脚本形式的上述解决方案,最好不涉及VBA。我想在出现提示时输入表名称,以便脚本知道要更新的表。仅供参考:如果参数不是我在上面的脚本中显示的表格,则它起作用。
非常感谢帮助/咨询。
由于似乎无法使用参数作为表名,因此您可以建议使用VBA解决方案吗?也许是示例代码?
答案 0 :(得分:2)
如评论中所述,没有VBA,您无法真正解决这个问题。
您可以将SQL查询存储在字符串中,并使用占位符指示表名。然后使用输入框获取表名,并用表名替换占位符。
Dim sqlString As String
sqlString = "UPDATE [%Placeholder%] " & vbCrLf & _
"INNER JOIN Excel_Data ON [%Placeholder%].[Part Number] = Excel_Data.[Part Number] " & vbCrLf & _
"SET [%Placeholder%].[Value] = '?', " & vbCrLf & _
...
"WHERE [%Placeholder%].Description Is Null;"
sqlString = Replace(sqlString, "%PlaceHolder%", InputBox("Enter a tablename"))
CurrentDb.Execute sqlString
在一个更成熟的解决方案中,我将创建一个包含所有可用表名的组合框的表单,并添加一个清理表名的函数(将“]”替换为“]]”)