【问题标题】:Passing parameters from one query to a view in MS-Access?将参数从一个查询传递到 MS-Access 中的视图?
【发布时间】:2012-10-10 14:27:09
【问题描述】:

如果您在 Microsoft Access 中定义查询,

例如,

SELECT * FROM T_Employees t WHERE t.LastName=[LastName]

将显示一个弹出对话框,要求您输入LastName 的值。 LastName 命名参数。

现在也可以从这里创建一个视图

CREATE VIEW paramTest AS SELECT * FROM T_Employees t WHERE t.LastName=[LastName]

但是在另一个查询中调用这个视图时,参数被忽略了......

那么如何从另一个查询调用上面创建的视图并在该视图中指定命名参数的值? (最好没有 VBA,我正在尝试使用它来编写一个涉及 SQuirreL SQL 中的视图的查询)。

【问题讨论】:

  • 注意:使用 Scripts->Create Select Script 重新检索 VIEW 的 SQL 语句的内容会产生我上面包含的缺失的 WHERE 子句。
  • 另外我知道你可以在 SQUirrel SQL 中使用:paramName 语法包含参数,但你不能这样创建VIEWs。

标签: sql ms-access view ms-access-2003 squirrel-sql


【解决方案1】:

CREATE VIEW 语句使用以下 SQL 创建命名查询 paramTest

SELECT *
FROM T_Employees AS t
WHERE (((t.LastName)=[LastName]));

在运行该查询时,数据库引擎不会将[LastName] 解释为参数,因此不会弹出参数对话框,因为参数的名称与字段名称相同。本质上,db 引擎返回每个 LastName 字段等于自身的行......所有行。

如果您想创建一个有效的参数查询,请为参数指定一个与数据源中的任何字段名称都不匹配的名称。而且,正如罗恩所说。 CREATE VIEW 不允许您创建参数查询。但是您可以使用CREATE PROCEDURE 创建一个。

CurrentProject.Connection.Execute "CREATE PROCEDURE paramTest " & _
    "(Which_LastName TEXT(255)) AS" & vbCrLf & _
    "SELECT * FROM T_Employees t WHERE t.LastName=[Which_LastName];"

【讨论】:

  • 是否可以在查询中使用参数调用存储过程?
  • 我不知道你提到的那个 Squirley SQL 会如何工作。从 pyodbc,我可以打开一个游标:"SELECT * FROM paramTest", "Doe" ... IOW,在 SQL 语句之后包含参数值。
【解决方案2】:

VIEWS 不允许使用参数。把它们想象成表而不是查询。通常在需要参数时使用存储过程。为了将参数合并到视图中,您必须使用参数值创建一个表并将其包含在 VIEW SQL 中。参数表通常包含一个 USER ID 以避免并发请求冲突。

【讨论】:

  • Access有存储过程吗?
  • 我对 SQUirrel SQL 不熟悉,假设的过程是支持的。
  • 看起来它们是...它在Objects 面板中将它们列为PROCEDURE
  • 太棒了。 VIEW/PARM TABLE 方法很棘手。似乎 HansUp 的解决方案可以解决问题。
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多