2016-03-02 38 views
0

假设在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文件的联合。

如何执行'** What do I do here?部件以便存储过程的结果将填充报告?

+1

备注:您应该**不要**为存储过程使用'sp_'前缀。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并使用别的东西作为前缀 - 或者根本没有前缀! –

+2

创建传递查询,从存储过程中提取数据并将查询用作报表的记录源。 – HansUp

回答

2

您可以将窗体的记录源设置为调用存储过程的传递查询(类似于将其设置为表名或查询/视图的方式)。

然后你可以简单地使用数据感知控件。