我正在将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表单。
答案 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