Sql server 是否可以将访问表单连接到SQL Server视图

Sql server 是否可以将访问表单连接到SQL Server视图,sql-server,ms-access,Sql Server,Ms Access,我正在将Access DB迁移到SQL Server,一切都进展缓慢,但我不确定如何将Access窗体连接到SQL Server视图 到目前为止,我已经将所有表链接到SQLServer,我正在将Access查询迁移到视图中,但是我遇到了一个错误,A2SS0069:无法转换外部变量 其中引用了我的Access文件中的表单: SELECT TOP 9223372036854775807 WITH TIES [AcuteHospitals].[NHSN_ID], [Ac

我正在将Access DB迁移到SQL Server,一切都进展缓慢,但我不确定如何将Access窗体连接到SQL Server视图

到目前为止,我已经将所有表链接到SQLServer,我正在将Access查询迁移到视图中,但是我遇到了一个错误,A2SS0069:无法转换外部变量

其中引用了我的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]
这是[SummaryYQ_LOV].[SummaryYQ]=形成的线条!YQ_Location.text5

因此,我需要知道这是否可能,以及如何让这个新视图与访问表单连接。

问题就在这里

其中[SummaryYQ_LOV].[SummaryYQ]=表单!YQ_Location.text5

您不能将这样的Access查询转换为SQL视图,但可以改为使用并从字段表单传递值!YQ_Location.text5作为参数


此外,您不需要这个带有领带的TOP 9223372036854775807,它是多余的。

您不能直接在SQL视图中引用访问表单。你需要重新思考一下这其中的逻辑。您可以使用硬编码的适当值创建多个视图,或者将视图转换为,并将值作为传递

例如,假设参数是字符串:

    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

SQL Server提供了一个优秀的免费MS访问MS-SQL迁移工具。它在转换MS Access查询方面做得非常好。我还没有尝试过用表单参数转换查询,但这确实值得一看,您也可以学到一些东西,特别是如果您计划转换其他查询

只需创建SQL server视图,然后从Access字体结束链接到该视图。这很容易,不需要做很多工作

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


事实上,使用绑定到链接表或在本例中为视图的Access窗体或报表很容易,Access只会下拉您在open form或open report命令的where子句中指定的REOCRD。

9223372036854775807是一个大数字……是的,这个数字正是SSMA在尝试转换它时给出的。您不知道如何构建存储过程,是吗?我第一次看到这些东西。。。