【发布时间】:2016-03-02 16:38:24
【问题描述】:
假设这个存储过程在 SQL Server 中:
CREATE PROCEDURE sp_MySP AS
BEGIN
SELECT a.Field1, a.Field2, v.Field3, p.Field4, a.Field5
INTO #Temp1
FROM tblMyTable1 AS a, tblMyTable2 AS p, tblMyTable3 AS v
WHERE a.Field1 = p.Field1
AND a.Field1 = v.Field1
SELECT a.Field1, a.Field2, v.Field3, p.Field4, a.Field5
INTO #Temp2
FROM tblMyTable1 AS a, tblMyTable2 AS p, tblMyTable3 AS v
WHERE a.Field1 = p.Field1
AND a.Field1 = v.Field1
SELECT *
FROM #Temp1
UNION ALL
SELECT *
FROM #Temp2
END
还有这个vba代码(我把vba代码放在了报表的LOAD事件上):
Private Sub Report_Load()
Dim rs As ADODB.Recordset
Dim cnComments As New ADODB.Connection
Dim strConn As String
strConn = "PROVIDER=SQLOLEDB;DATA SOURCE=WML202;INITIAL CATALOG=TOOL_TRACKING;UID=" & CVHx(SSTR1) & ";PWD=" & CVHx(SSTR2) & ";"
cnComments.Open strConn
Set rs = cnComments.Execute("EXEC sp_MySP")
'** What do I do here?
End Sub
实际的存储过程要复杂得多(并且不必要),但这就是数据集的布局。这是几个 #Temp 文件的 UNION ALL。
我如何处理'** What do I do here? 部分,以便存储过程的结果将填充报告?
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
创建一个传递查询,该查询从存储过程中获取数据并将该查询用作报表的记录源。
标签: sql-server ms-access vba ms-access-2010