标识符内的参数

时间:2019-01-02 17:07:05

标签: ms-access

我正在尝试编写一个添加查询,该查询将根据参数而改变。我有几个查询:

LastK1StatDate
LastK2StatDate


LastK15StatDate
LastK16StatDate

运行查询时,我的条件应根据为参数“ qryKioskNum”输入的值而改变。

目前我的标准是:

>Max("[LastK" & [qryKioskNum] & "StatDate]![K" & [qryKioskNum] & "LastDate]")

qryKioskNum是短文本类型

它一直给我错误“表达式输入错误,或者太复杂而无法计算。”

这是此查询的完整SQL语句:

PARAMETERS qryKioskNum Short;  
INSERT INTO K1DispRejStat ( K1StatDate, K1BillCount1, K1BillCount2, 
K1BillCount3, K1BillCount4, K1BillCount5, K1BillCount6, K1BillRej1, 
K1BillRej2, K1BillRej3, K1BillRej4, K1BillRej5, K1BillRej6 )  
SELECT DateValue([responseFrames]![dispDateTime]) AS [Date], 
Sum(responseFrames.billCount1) AS SumOfbillCount1, 
Sum(responseFrames.billCount2) AS SumOfbillCount2, 
Sum(responseFrames.billCount3) AS SumOfbillCount3, 
Sum(responseFrames.billCount4) AS SumOfbillCount4, 
Sum(responseFrames.billCount5) AS SumOfbillCount5, 
Sum(responseFrames.billCount6) AS SumOfbillCount6, 
Sum(responseFrames.BillRej1) AS SumOfBillRej1, Sum(responseFrames.BillRej2) 
AS SumOfBillRej2, Sum(responseFrames.BillRej3) AS SumOfBillRej3, 
Sum(responseFrames.BillRej4) AS SumOfBillRej4, Sum(responseFrames.billRej5) 
AS SumOfbillRej5, Sum(responseFrames.billRej6) AS SumOfbillRej6  
FROM responseFrames, LastK1StatDate  
WHERE (((responseFrames.kioskID)="K1"))
GROUP BY DateValue([responseFrames]![dispDateTime])
HAVING (((DateValue([responseFrames]![dispDateTime]))>Max("[LastK" & 
[qryKioskNum] & "StatDate]![K1LastDate]")))
ORDER BY DateValue([responseFrames]![dispDateTime]);  

当前所有内容都设置为“ K1”,但我希望所有对K1的引用都是动态的

我认为这只是一个语法问题,但是找不到确切的输入方式。

任何帮助都是伟大的。谢谢!

*为清楚起见进行了编辑

2 个答案:

答案 0 :(得分:0)

我怀疑您可以通过使用带有参数的查询来完成这项工作。使用VBA会更好。使用InputBox获取查询的变量部分,并使用DoCmd.RunSQL运行查询。

答案 1 :(得分:0)

在msaccess中,创建一个PassThru查询(因为它保留了多行尼斯格式)。

创建// QueryDesign //关闭//右键单击// SQLSpecific // PassThru

粘贴以下sql。

INSERT INTO kxxdisprejstat

            (kxxstatdate,
             kxxbillcount1,
             kxxbillcount2,
             kxxbillcount3,
             kxxbillcount4,
             kxxbillcount5,
             kxxbillcount6,
             kxxbillrej1,
             kxxbillrej2,
             kxxbillrej3,
             kxxbillrej4,
             kxxbillrej5,
             kxxbillrej6)

SELECT Datevalue([responseframes] ! [dispdatetime]) AS [Date],
       SUM(responseframes.billcount1)               AS SumOfbillCount1,
       SUM(responseframes.billcount2)               AS SumOfbillCount2,
       SUM(responseframes.billcount3)               AS SumOfbillCount3,
       SUM(responseframes.billcount4)               AS SumOfbillCount4,
       SUM(responseframes.billcount5)               AS SumOfbillCount5,
       SUM(responseframes.billcount6)               AS SumOfbillCount6,
       SUM(responseframes.billrej1)                 AS SumOfBillRej1,
       SUM(responseframes.billrej2)                 AS SumOfBillRej2,
       SUM(responseframes.billrej3)                 AS SumOfBillRej3,
       SUM(responseframes.billrej4)                 AS SumOfBillRej4,
       SUM(responseframes.billrej5)                 AS SumOfbillRej5,
       SUM(responseframes.billrej6)                 AS SumOfbillRej6

FROM   responseframes,
       lastkxxstatdate

WHERE  (( ( responseframes.kioskid ) = "kxx" ))

GROUP  BY Datevalue([responseframes] ! [dispdatetime])

HAVING (( ( Datevalue([responseframes] ! [dispdatetime]) ) 
           > Max([lastkxxstatdate]![kxxlastdate]) ))

ORDER  BY Datevalue([responseframes] ! [dispdatetime]); 

将其命名为kxxInsert(或类似的名称,使用kxx表示它是通用的)。

然后将其添加到程序中

Sub getKxx()
    Dim qrykiosknum As Integer  ' temp here to have something
    qrykiosknum = 3             ' temp here for an example

    Dim kxxSQL As String, strSQL As String
    kxxSQL = CurrentDb.QueryDefs("kxxInsert").SQL
    strSQL = Replace(kxxSQL, "kxx", "k" & qrykiosknum)
    'MsgBox (strSQL)  ' it is too big to see all of it
    Debug.Print strSQL

    ' then run strSQL


End Sub

在执行SQL之前执行替换操作时,可以在MSAccess或MSSQLServer中具有动态表名。