繁体   English   中英

使用变量作为 MS Access 子表单记录源的 SQL Server 查询

[英]SQL Server Query with variables as MS Access subform record source

我试图找出构建动态查询并将其用作 MS Access 子表单的记录源的最佳方法。 我现在已经静态分配了我的 WHERE 子句,这样我就可以构建表单并确保数据正确提取。 主表单将有 2 个格式化为 ShortDate 的文本框和 2 个带有查询结果的子表单。 第一个子表单是按员工姓名分组的查询,第二个子表单是部门总数的总和。

FWIW 这是一个 Access 2010 ADP/ADE 前端,SQL Server 2008 后端。 我当前用于部门总计的 SQL 如下:

SELECT        COUNT(*) AS TotalNumEstimates, SUM(NumPanels) AS TotalNumPanels, SUM(PriceBase) AS TotalBasePrice, SUM(PriceBase) / SUM(NumPanels) AS ValuePricePerPanel 
FROM            dbo.tblBid 
WHERE        (Date > CONVERT(DATETIME, '2016-01-01 00:00:00', 102)) 
HAVING        (SUM(NumPanels) > 0)

我计划将 WHERE 子句更改为“WHERE Date BETWEEN @FromDate and @ToDate”。 然后在设置日期并单击“运行报告”按钮时的 Access 表单上,以编程方式设置 OnClick 事件以分别将 txtFromDate 和 txtToDate 传递给 @FromDate 和 @ToDate,但我无法弄清楚那部分.

我能看到的唯一其他选项是将整个 SQL 语句作为字符串输入,并在 OnClick 事件中声明 txtFromDate 和 txtToDate,并将子表单记录源更改为新字符串。 有没有更好的方法来做到这一点?

我相信我已经解决了通过创建存储过程将文本框传递给 WHERE 子句的最初问题。 如果我不能让存储过程工作,我会重新发布,但这似乎很容易。

使用 [永久] 临时表,然后在卸载表单时将其删除。 如果多个用户将同时使用该表单,则需要在名称中添加某种类型的会话号。 所以:

SELECT COUNT(*) AS TotalNumEstimates, SUM(NumPanels) AS TotalNumPanels, SUM(PriceBase) AS TotalBasePrice, SUM(PriceBase) / SUM(NumPanels) AS ValuePricePerPanel 
INTO   dbo.TempSubFormTable    
FROM   dbo.tblBid 
WHERE  Date > '2016-01-01'
HAVING SUM(NumPanels) > 0

从您的子表单中删除记录源,并为其提供一个公共接口:

Public Sub SetRecordSource(tbl as string)
    Me.RecordSource = "SELECT * FROM tbl" 'ORDER BY ...
End Sub

然后,在创建临时表之前,使您的子表单不可见。 创建临时表后,

Me.subformName.Visible = True
Me.subformName.SetRecordSource temporary_table_name 'without the dbo. part of the name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM