2011-12-28 175 views
1

所以我在连接Access到SqlServer的过程中。我需要做的是:从access连接到sql server

  • 连接表(不通过增发向导)
  • 查询(不工作了,因为Microsfot的SqlServer迁移Assitant想不出应对来自表单的外部变量以及一些未知功能)
  • 报告,我还没有,甚至开始

这样的方式在客户端机器上完成的唯一工作是使用Access中的表单,并且查询,报告和数据都在服务器上处理。

我想我的问题是如何正确迁移这些查询?我不知道林要如何连接查询的访问形式来解决这些外部变量这样的错误:

SELECT AcuteHospitals.HospitalName, Sum(IIf([Quarterly CLABSI Numbers by Hospital]![Number of CLABSI] Is Null,"--",[Quarterly CLABSI Numbers by Hospital]![Number of CLABSI])) AS CLABSI, Sum(IIf([Quarterly CLABSI Numbers by Hospital]![Central Line Days] Is Null,"--",IIf([Quarterly CLABSI Numbers by Hospital]![Central Line Days]=0,0,Format([Quarterly CLABSI Numbers by Hospital]![Central Line Days],"#,###")))) AS CLD, [Quarterly CLABSI Numbers by Hospital].SizeCat, [Quarterly CLABSI Numbers by Hospital].BedSize 
FROM AcuteHospitals LEFT JOIN [Quarterly CLABSI Numbers by Hospital] ON AcuteHospitals.HospitalName = [Quarterly CLABSI Numbers by Hospital].HospitalName 
WHERE ((([Quarterly CLABSI Numbers by Hospital].SummaryYQ) In ("2010Q1","2010Q2"))) 
GROUP BY AcuteHospitals.HospitalName, [Quarterly CLABSI Numbers by Hospital].SizeCat, [Quarterly CLABSI Numbers by Hospital].BedSize 
ORDER BY AcuteHospitals.HospitalName; 

给了我以下错误:

SSMA warning messages: 
* A2SS0030: View '2010Q1-Q2 CLABSI Rate by Hospitalstep1test' has a name that might cause problems for the Access application to function correctly against SQL Server. 
*/ 


    /* 
    * SSMA error messages: 
    * A2SS0069: External variable cannot be converted. 

    * A2SS0061: The identifier 'Format(UNKNOWN, VARCHAR)' was not converted. 

我固定的格式错误,但我不知道如何解决其他的

+3

您的问题是什么? – Andomar 2011-12-28 17:29:30

+0

我不确定你的问题。 – rene 2011-12-28 17:31:45

+0

对不起,我不是故意提交最后一个。手指滑落 – rugbert 2011-12-28 17:46:20

回答

1

它只是说,它不能将此转换为SQL Server的方言:

Format([Quarterly CLABSI Numbers by Hospital]![Central Line Days],"#,###")))) 

由于T-SQL没有格式化功能,这至少是可以防御的。

我最后一次转换的Access数据库的方式是:

  1. 导入表到SQL Server
  2. 创建一个空的名.adb文件。这些文件使用SQL Server作为其后端。
  3. 然后,我逐个将旧的MDB的表格和报告导入新的ADB。每个人都可以从小改变到完全改写。
+0

正确,但是如果用户将数据表升迁到SQL Server,那么Access内部的原始查询将继续运行,并且不需要重新编写现有查询。最常见的查询也将尊重服务器端索引,并且只有一行将被拉下网络管道。简而言之:无需重新编写Access查询,而oringal格式命令也可以正常工作。 – 2011-12-29 23:03:20

+0

有趣的是,自从我们创建了我们的ADP数据库以来,看起来官方的行改变了很多。我会投你的答案! – Andomar 2011-12-29 23:10:41

3

这里推荐的方法是仅将您的数据升迁到SQL服务器。

然后您只需将Access“前端”链接到SQL数据库即可。

您不想创建或使用访问数据项目。

实际上,作为一般规则,它首先会更好地分割数据库。事实上,如果这个应用程序在过去几年中得到了正确的开发和维护,它几乎就是一个给定的时间,它被分成前端或所谓的应用程序部分,后端仅仅是数据部分。

它只是你想发送到SQL服务器的数据,你不想将你的应用程序转换成数据项目,或者做任何其他的事情,导致你不得不重写你的VBA代码,不得不重建您的查询。

所以,你需要的数据仅部分和升迁数据到SQL服务器。结果通常是升迁向导会为你创建链接表。不要在此创建访问数据项目,只需升级数据。

在这一点上,你可以导入这些表链接到您的后端到您的前端,或者干脆删除您在您的接入前端,现在您现有的表链接RE链接这些表到SQL Server。

在时间目前所有的查询将继续发挥作用,而目前所有的查询,这一点不会有被改写。

没有必要重新创建所有查询。唯一需要重新创建某些查询的时间可能是出于性能原因。随着时间的推移,你可以担心并努力。您还会发现,99%的VBA和DAO记录集代码将继续运行得很好。

如果您升迁到Access数据项目(ADP),那么你必须在你的VBA重新编写任何DAO代码。而且你必须使用ADO,正如微软已经指出的那样,ADO的出路很大。微软表示,未来的技术是ODBC和Access,意味着DAO。

如果你想升迁表到名为Azure的SQL服务器的最新和最伟大eddition,只支持烤成访问了2010年的规定未来的路技术使用连接表(ODBC)。所以在Access中,这意味着你要继续使用DAO。

如果应用程序没有使用ADO,那么我还是建议使用,而不是Access数据库的尝试转换为ADP项目链接表到SQL Server。

因此,使用链接表意味着您现有的查询将不需要修改。

+0

你知道,那正是我想的,但我只是一个实习生,所以我必须做我所告诉的。他们希望一切都转移到服务器上,以完成所有工作。 – rugbert 2011-12-29 14:09:35

+0

没问题。但是,您无法使用SQL Server创建数据输入表单,也无法使用SQL Server创建报表。所以SQL服务器只是表格的一个地方。您仍然必须提供某种类型的手段与数据进行交互 - 因此访问仍然是一个不错的选择。 – 2011-12-29 23:04:33

+0

嗯,确定SQL Server中有哪些视图?迁移不断尝试将查询转换为视图。 – rugbert 2011-12-30 15:04:39

0

现在支持SQL 2012中的FORMAT功能。