使用参数不使用提示参数更新的访问直通查询

时间:2019-05-31 02:21:57

标签: tsql ms-access parameters pass-through

使用默认参数时,Access传递查询有效。在Access报表中使用时,所使用的提示将根据ptq中的默认参数而不是已回答的提示返回记录。将返回默认数据。

我有一个有效的基于SQL Server的存储过程uspWorkCentreReport,它使用@TheDate DATE,@ WC VARCHAR(15),@ Shift INT作为参数,并通过SELECT语句返回[作业编号],[REL# ],[作业名称],QTY。这是sp的ALTER行:

ALTER PROCEDURE [dbo].[uspWorkCentreReport] @TheDate DATE,@WC VARCHAR(15),@Shift INT

Access传递查询ptq_uspWorkCentreReport传递这些默认参数'2019-05-30','PCOT',1,并使用无DSN ODBC连接来返回默认数据。我忘记尝试了,但是我认为它将返回正确的数据以及我用来替换'2019-05-30','PCOT',1的任何默认参数。编辑-我今天上午尝试过,实际上任何适当的替换参数都会返回适当的关联记录。这是ptq的一行:

exec uspWorkCentreReport '2019-05-30','PCOT',1

我为ptq提供基于Albert D. Kallal's SO reply的默认参数。

我使用Access选择查询qry_ptq_uspWorkCentreReport来接收[作业编号],[REL#],[作业名称],QTY,并传递参数TheDate,设置为带时间的日期,WC,设置为短文本和Shift,设置为Integer。 qry_ptq_uspWorkCentreReport使用传递查询。这些参数是使用Access的“参数”小程序设置的,而不是在查询字段中设置的。运行此select查询将提示输入3个参数,但仅返回基于ptq的一行中设置的默认参数的数据。我本来不打算查看Access SQL语句,但明天早上上班时会这样做。编辑-这是qry_ptq_uspWorkCentreReport的SQL语句:

PARAMETERS TheDate DateTime, WC Text ( 255 ), Shift Short;
SELECT ptq_uspWorkCentreReport.[JOB NUMBER], ptq_uspWorkCentreReport.[REL #], ptq_uspWorkCentreReport.[JOB NAME], ptq_uspWorkCentreReport.QTY
FROM ptq_uspWorkCentreReport;

当然,以上三个功能最终会在Access报告rpt_qry_ptq_WorkCentreReport中达到最高目的,以使记录易于阅读。

我在另一个报告中使用了相同的场景,其中以“开始”和“结束”日期为参数。运行该报告时,提示会提取日期并根据这些日期(而不是ptq中的日期)返回记录。这是ptq:

exec uspMergeAandPJobs '2018-01-01','2019-01-01'

确实,我尝试使用

exec uspMergeAandPJobs '',''

该报告返回0条记录!

不确定我要缺少的内容,感谢您的反馈。 TIA。

1 个答案:

答案 0 :(得分:0)

您的Access查询具有参数:

PARAMETERS TheDate DateTime, WC Text ( 255 ), Shift Short;

并且由于它们是在查询定义中定义的,因此Access在打开/运行查询时会要求它们。

但是从未使用过这些参数!

Access无法将这些参数传递到作为Access查询基础的传递查询中。同样,PT查询不过是一个连接字符串和一个常量SQL字符串。

因此,当您运行Access查询时,它将始终运行PT查询的已保存内容,即
exec uspWorkCentreReport '2019-05-30','PCOT',1
您输入的参数将被忽略。

您需要做什么(如您所指的answer中所述):

  • 创建一个表单以收集参数值
  • 使用VBA为PT查询动态创建SQL字符串
  • 将该SQL分配给PT查询:
    CurrentDb.QueryDefs("ptq_uspWorkCentreReport").SQL = strSql
    (它会自动保存)
  • 然后您可以基于Access查询运行报告-或更好:直接使用PT查询作为报告的记录源。

从Access查询中删除参数,它们对于您的情况没有用。或完全删除查询,除非您需要将查询与其他查询结合在一起。