2012-01-06 48 views
0

我正在將Access數據庫遷移到SQL Server,並且所有內容都正在緩慢進行,但我不知道如何將Access窗體連接到SQL Server視圖。是否有可能將訪問表單連接到SQL Server視圖

到目前爲止,我已經連接到SQL Server和Im在Access查詢遷移到意見工作中的所有表,但香港專業教育學院得到這個錯誤,A2SS0069: External variable cannot be converted

其中引用的形式在我訪問文件:

SELECT TOP 9223372036854775807 WITH TIES 
     [AcuteHospitals].[NHSN_ID], 
     [AcuteHospitals].[HospitalName], 
     [Location_LOV].[Description] AS Location, 
     Sum([RateTable_CLABData].[clabcount]) AS [Number of CLABSI], 
     Sum([RateTable_CLABData].[numcldays]) AS [Central Line Days], 
     [RateTable_CLABData].[CLAB_Mean] AS [National Average] 
    FROM 
     (([AcuteHospitals] 
     LEFT JOIN [RateTable_CLABData] 
     ON [AcuteHospitals].[NHSN_ID] = [RateTable_CLABData].[orgID]) 
     LEFT JOIN [Location_LOV] 
     ON [RateTable_CLABData].[loccdc] = [Location_LOV].[CDCLoc]) 
     LEFT JOIN [SummaryYQ_LOV] 
     ON [RateTable_CLABData].[summaryYQ] = [SummaryYQ_LOV].[StartDate] 
    WHERE ((([SummaryYQ_LOV].[SummaryYQ]) = forms!YQ_Location.text5)) 
    GROUP BY 
     [AcuteHospitals].[NHSN_ID], 
     [AcuteHospitals].[HospitalName], 
     [Location_LOV].[Description], 
     [RateTable_CLABData].[CLAB_Mean], 
     [RateTable_CLABData].[loccdc] 
    HAVING ((([RateTable_CLABData].[loccdc]) NOT LIKE '%ped%')) 
    ORDER BY [AcuteHospitals].[HospitalName], [RateTable_CLABData].[loccdc] 

其行WHERE ((([SummaryYQ_LOV].[SummaryYQ]) = forms!YQ_Location.text5))

所以,我需要知道,如果有可能,以及如何得到這個與訪問形式連接新的看法。

+0

9223372036854775807是一個很大的數字...... – Simon 2012-01-06 15:52:17

回答

3

的問題是在這裏

WHERE((([SummaryYQ_LOV] [SummaryYQ)= 形式!YQ_Location.text5))

你不能這樣Access查詢轉換爲SQL View,但您可以使用Stored Procedure,並將字段forms!YQ_Location.text5的值作爲參數傳遞。你也不需要這個TOP 9223372036854775807 WITH TIES它是多餘的。

+0

是啊,這個數字就是我嘗試轉換時SSMA吐出的數字。你不知道如何建立存儲過程嗎?我第一次看到這些東西...... – rugbert 2012-01-06 15:53:36

2

您無法直接在SQL視圖中引用Access窗體。你需要重新思考這個邏輯。您可以使用硬編碼(不可接受)的適當值創建許多視圖,也可以將視圖轉換爲Stored Procedure並將值作爲parameter傳遞。

例如(假設參數是一個字符串):

create proc s_MyStoredProc 

    @Location varchar(50) 

    AS 
    BEGIN 
    SELECT 
     [AcuteHospitals].[NHSN_ID], 
     [AcuteHospitals].[HospitalName], 
     [Location_LOV].[Description] AS Location, 
     Sum([RateTable_CLABData].[clabcount]) AS [Number of CLABSI], 
     Sum([RateTable_CLABData].[numcldays]) AS [Central Line Days], 
     [RateTable_CLABData].[CLAB_Mean] AS [National Average] 
    FROM 
     (([AcuteHospitals] 
     LEFT JOIN [RateTable_CLABData] 
     ON [AcuteHospitals].[NHSN_ID] = [RateTable_CLABData].[orgID]) 
     LEFT JOIN [Location_LOV] 
     ON [RateTable_CLABData].[loccdc] = [Location_LOV].[CDCLoc]) 
     LEFT JOIN [SummaryYQ_LOV] 
     ON [RateTable_CLABData].[summaryYQ] = [SummaryYQ_LOV].[StartDate] 
    WHERE ((([SummaryYQ_LOV].[SummaryYQ]) = @Location)) 
    GROUP BY 
     [AcuteHospitals].[NHSN_ID], 
     [AcuteHospitals].[HospitalName], 
     [Location_LOV].[Description], 
     [RateTable_CLABData].[CLAB_Mean], 
     [RateTable_CLABData].[loccdc] 
    HAVING ((([RateTable_CLABData].[loccdc]) NOT LIKE '%ped%')) 
    ORDER BY [AcuteHospitals].[HospitalName], [RateTable_CLABData].[loccdc] 

END 
1

只需創建SQL Server視圖,然後從Access字體末端鏈接到該視圖。這很容易,沒有太多的工作。

至於任何參數?只需從查詢和視圖中刪除它們即可。然後,您只需使用Access客戶端的where子句打開報告。

實際上,使用與鏈接表(或本例中的視圖)綁定的訪問表單或報表很容易,Access只會打開您在打開表單的「where」子句中指定的reocrds,或者打開報告命令。