2016-03-02 37 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

您可以將窗體的記錄源設置爲調用存儲過程的傳遞查詢(類似於將其設置爲表名或查詢/視圖的方式)。

然後你可以簡單地使用數據感知控件。