将参数从一个查询传递到MS-Access中的视图?

时间:2012-10-10 14:27:10

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

如果在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中视图的查询)。

2 个答案:

答案 0 :(得分:2)

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

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

运行该查询时,db引擎不会将[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];"

答案 1 :(得分:0)

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

相关问题