是否可以将Access窗体连接到SQL Server视图

时间:2012-01-06 15:21:01

标签: sql-server ms-access

我正在将Access数据库迁移到SQL Server,一切都在慢慢出现,但我不确定如何将Access表单连接到SQL Server视图。

到目前为止,我已将所有表链接到SQL Server,我正在努力将Access查询迁移到视图中,但我收到此错误,A2SS0069: External variable cannot be converted

引用我的Access文件中的表单:

  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 ))

所以我需要知道是否可以以及如何使用这个新视图连接Access表单。

4 个答案:

答案 0 :(得分:3)

问题出在这里

  

WHERE((([SummaryYQ_LOV]。[SummaryYQ])= 表格!YQ_Location.text5 ))

您无法将此类Access查询转换为SQL视图,但您可以改为使用Stored Procedure并将字段forms!YQ_Location.text5中的值作为参数传递。

此外,您不需要TOP 9223372036854775807 WITH TIES这是多余的。

答案 1 :(得分: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

答案 2 :(得分:2)

只需创建SQL Server视图,然后从Access字体结束链接创建该视图。这很容易,没有多少工作。

至于任何参数?只需从查询和视图中删除它们即可。然后,您只需使用Access客户端中的where子句打开报告。

事实上,使用绑定到链接表(或在本例中为视图)的Access表单或报表很容易,Access只会在打开表单的“where”子句中打开您指定的reocrds或打开报告命令。

答案 3 :(得分:0)

SQL Server具有出色的(并且免费)MS-Access MS-SQL迁移工具。它在转换MS-Access查询方面做得非常好。我没有尝试使用表单参数转换查询,但它肯定值得一看,你也可以学习一些东西,特别是如果你打算转换其他查询。 http://www.microsoft.com/sqlserver/en/us/product-info/migration-tool.aspx#oracle