【问题标题】:Run one MS Access SQL script on a particular Table chosen by user在用户选择的特定表上运行一个 MS Access SQL 脚本
【发布时间】:2018-12-06 08:22:55
【问题描述】:

我有一个包含 20 多个表的 MS Access 2016 数据库 (*.accdb)。每个表中的字段略有不同。我没有 VBA 经验,所以我只坚持下面的 SQL 查询(已编辑)。

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。我想在提示时输入表名称,以便脚本知道要更新哪个表。仅供参考:当它不是我在上面的脚本中显示的表格时,参数可以工作。

高度赞赏帮助/建议。

编辑 1

由于似乎无法将参数用作表名,您能否建议一个 VBA 解决方案?也许是一个示例代码?

【问题讨论】:

  • 您不能对表名、句号使用参数。需要使用动态表名表示非规范化设计。处理它的唯一方法是通过 VBA,如果您没有 0 经验并且无法解释或调整您在答案中获得的代码,我不建议您将 VBA 集成到您的应用程序中。
  • 谢谢。在这种情况下,我必须使用 VBA。我会学习的。你能为我推荐一个 VBA 代码 sn-p 吗?我会相应地编辑问题。

标签: sql ms-access jet-sql


【解决方案1】:

正如 cmets 中所说,如果没有 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

在一个更成熟的解决方案中,我会创建一个包含所有可用表名的组合框的表单,并添加一个函数来清理表名(将“]”替换为“]]”)

【讨论】:

  • 谢谢。作品!我把整个东西放在一个表单上,然后稍微改进一下,直接从文本输入框中读取输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多