从访问连接到sql server

时间:2011-12-28 17:24:14

标签: sql-server ms-access

所以我正在连接Access到SqlServer。我需要做的是:

  • 连接表格(不要通过upsize向导)
  • 查询(由于Microsfot SqlServer Migration Assitant无法处理表单中的外部变量以及某些未知函数,因此无法解决)
  • 报告,我还没有开始

这样,在客户端计算机上唯一做的就是在Access中使用表单,查询,报告和数据都在服务器上处理。

我想我的问题是如何正确迁移这些查询?我不知道如何将查询连接到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 个答案:

答案 0 :(得分:3)

此处推荐的方法是仅将数据升级到SQL服务器。

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

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

事实上,作为一般规则,首先分割数据库要好得多。事实上,如果这个应用程序多年来已经正确开发和维护,那么它几乎是给定的.1。它被分成前端或所谓的应用程序部分,后端分为仅数据一部分。

只有您想要发送到SQL服务器的数据,您不希望将应用程序转换为数据项目,或者执行任何其他操作,这将导致您必须重写您的VBA代码和必须重建你的查询。

因此,您只获取DATA ONLY部分并将数据升迁到SQL Server。结果通常是升迁向导将为您创建链接表。不要在此处创建访问数据项目,只需升级数据即可。

此时,您可以将这些表链接从后端导入到前端,或者只是删除访问前端中的现有表链接,现在将这些表链接到SQL服务器。

此时所有当前查询都将继续运行,并且不必重写所有当前查询。

无需重新创建所有查询。您唯一需要重新创建一些查询的时间可能是出于性能原因。这是你可以担心和长期工作的事情。您还会发现99%的VBA甚至DAO记录集代码都将继续正常运行。

如果升迁到Access数据项目(ADP),则必须在VBA中重写任何DAO代码。并且你必须使用ADO,正如微软已经说的那样,ADO已经走了很多路。微软表示,未来的技术是ODBC,而Access则意味着DAO。

如果您想将表升迁到名为Azure的SQL服务器的最新和最好的版本,那么唯一的支持就是Access 2010,而未来的道路技术正在使用链接表(ODBC)。所以在Access中这意味着你要继续使用DAO。

如果您的应用程序确实使用了ADO,那么我仍然建议将链接表用于SQL服务器,而不是尝试将Access数据库转换为ADP项目。

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

答案 1 :(得分: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。每个人都可以从小的改变到完全重写。

答案 2 :(得分:0)

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