使用默认参数时,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。
答案 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中所述):
CurrentDb.QueryDefs("ptq_uspWorkCentreReport").SQL = strSql
从Access查询中删除参数,它们对于您的情况没有用。或完全删除查询,除非您需要将查询与其他查询结合在一起。