繁体   English   中英

MS Access应用程序-将数据存储从Access转换为SQL Server

[英]MS Access Application - Convert data storage from Access to SQL Server

请记住,我不是Access专家。 我精通SQL Server和.Net框架。 这是我的情况:

承包商为我的公司构建了一个非常大型的MS Access 2007应用程序。

该应用程序已按访问权限分为两层: 有一个前端部分保存所有Ms Access表单,然后在后端部分保存访问表,查询等,这些表格存储在网络上的计算机上。

好吧,当然,有必要将数据存储部分转换为SQL Server 2005,同时保留所有在Ms Access中内置的GUI表单。 这是我进来的地方。

我读了一点,发现可以将表格甚至访问表链接到SQL Server表,但是我仍然不确定到底可以做什么以及如何做。

有人这样做吗? 请评论有关此任务的任何功能,限制和注意事项。 谢谢!

不要使用Access中的升迁向导:

  • 首先,它不适用于SQL Server 2008。

  • 其次,有一个更好的工具可以完成这项工作:
    SSMA,Microsoft免费提供的Access SQL Server迁移助手

它会为您做很多事情:

  • 将数据从Access移到SQL Server
  • 自动将表链接回Access
  • 由于两个数据库的差异,为您提供了大量有关潜在问题的信息
  • 跟踪更改,以便随着时间的推移使两者保持同步,直到迁移完成。

我最近写了一篇博客文章

您有两个选择, 升迁向导可以很好地完成将结构和数据从对Sql的访问中移出的工作。 然后,您可以设置链接表,以便您的应用程序“应该”像现在一样正常工作。 不幸的是,Access使用的Sql方言不同于Sql Server,因此,如果代码中有任何“原始sql”语句,则可能需要更改它们。

尽管您已经链接到表,但是Access的所有其他功能,QBE,表单等都应该可以正常工作。 那是最简单,可能也是最好的方法。

解决该问题的另一种方法是如上所述地迁移数据,然后在访问中使用ADO而不是使用链接表。 如果您习惯于其他语言/开发环境,则该方法有点麻烦,但这是错误的方法。 Access带有大量内置的东西,使处理数据变得非常容易,如果您回头使用ADO / Sql,则会失去很多好处。

我建议从应用程序的一小部分开始-非必要数据,然后迁移一些表并查看其运行方式。 当然,您首先要备份所有内容。

祝好运

其他人建议将Jet后端升级到SQL Server,并通过ODBC进行链接。 在理想的世界中,该应用程序可以完美运行,而无需进行任何更改。

在现实世界中,您会发现某些通过Jet后端高效而快速地设计的前端对象实际上无法很好地与服务器数据库配合使用。 有时,Jet会猜错并向服务器发送一些效率很低的东西。 大规模更新记录时尤其如此-为了不占用服务器资源(一件好事),Jet将为每条记录发送一条UPDATE语句(这对您的应用程序来说是一件坏事,因为它很多很多)比单个UPDATE语句慢)。

您需要做的是在应用放大后评估所有内容,并在出现性能问题的地方将一些逻辑转移到服务器上。 这意味着您可以创建一些服务器端视图,或者可以使用直通查询(将整个SQL语句移交给SQL Server,而不必让Jet担心),或者您可能需要在服务器上创建存储过程(特别是对于更新操作)。

但总的来说,假设大多数内容无需更改即可正常工作,这实际上是相当安全的。 它的运行速度可能不如旧的Access / Jet应用程序快,但是您可以在此处使用SQL Profiler找出保留的内容,并重新构建架构,以使用SQL Server后端提高效率。

如果Access应用程序已经进行了有效的设计(例如,窗体从不绑定到完整表,而是绑定到具有限制性WHERE子句的记录源仅返回1个或几条记录),那么它可能会很好地工作。 另一方面,如果它使用Access示例数据库和模板中看到的许多不良做法,则可能会遇到很多问题。

我认为,每个Access / Jet应用程序都应该从一开始就设计,其想法是有一天它将扩大到使用服务器后端。 这意味着Access / Jet应用程序实际上将非常高效,快捷,但是当您进行超大型安装时,它将减少痛苦。

这是您成本最低的选择。 您将要为指向SQL Server的Access客户端建立ODBC连接。 然后,您可以使用(我认为)“导入”选项通过ODBC源将表“链接”到SQL Server。 将数据从Access表迁移到SQL Server,然后以可以管理和备份的形式在SQL Server上存储数据。 重要的是,查询随后可以作为视图写在SQL Server上,也可以作为链接表呈现给Access db。

看一下这个Access to SQL Server迁移工具。 它可能是作为纯Web应用程序运行的少数几个(如果不是唯一的)真正的对等或服务器到服务器迁移工具之一。 它主要使用ASP 3.0,XML,文件系统对象,数据字典对象,ADO,ADO扩展(ADOX),字典脚本对象和其他一些简洁的Microsoft技术。 如果您在一台服务器上具有源访问表,而另一台服务器甚至是同一台服务器上具有目标SQL Server,并且希望将其作为Web Internet解决方案来运行,那么这就是您的产品。 此示例讨论了VPASP购物车,但它将适用于Access的任何版本以及从SQL 2000到SQL 2008的任何版本的SQL Server。

我正在完成通用数据库升级转换过程的开发,该过程涉及将VPASP Shopping或任何其他访问系统中的访问表,视图和索引结构自动转换为SQL Server 2005/2008等效项。 它可以直接从您的服务器运行,而无需外部人员或顾问的任何外部帮助。

在SQL Server中创建Access表,索引和视图的克隆后,此数据迁移例程将有选择地将所有数据从Access表迁移到新的SQL Server 2005/2008表中,而不必给出实际的Access数据库或数据库。表内容或您的密码给任何人。

这是针对具有约200个表,近300个索引和视图的系统运行的过程的逆向工程部分,这是作为系统验收测试而完成的。 仍在进行中,但核心部分已经就绪。

http://www.21stcenturyecommerce.com/SQLDDL/ViewDBTables.asp

我做访问表的DDL(数据定义语言)的自动化逆向工程,将其转换成SQL相当于DDL语句,因为表的结构,甚至额外的表可能是每一个VPASP客户和VPASP的每个版本在那里略有不同。

我正在完成实际的数据转换例程,该例程将在创建这些新的SQL表(包括任何视图或索引)之后将数据从Access迁移到SQL Server。 它完全是用ASP编写的,带有VB脚本,文件系统对象(FSO),字典对象,XML,DHTML,JavaScript现在,并且运行很快,就像针对SQL Server 2008数据库看到的那样。例。

对大约500个不同的数据库对象进行反向工程大约需要15-20秒。 此示例中涉及的170个表和270个索引可能总共涉及2,000多个列。

我什至想出了一种方法,让您在同一服务器上使用2个不同的数据库连接文件并行运行两个VPASP系统,以确保在实际转换之前在Access System和SQL Server系统上输入的订单产生相同的结果。生产。

John(a / k / a SQL Dude)sales@designersyles.biz(这是VP-ASP演示站点)

链接访问表工作正常,但我仅将它们用于ODBC和其他数据库(Firebird,MySQL,Sqlite3)。 没有传递有关主键或外键的信息。 数据类型解释也存在问题:MySQL中的日期与Access VBA中的日期不同。 我猜这些问题在使用SQL Server时并没有那么糟糕。

要点:如果您将Access中的表链接到SQL Server,则每个表都必须定义一个主键(Contractor?Access?经验表明,某些表可能没有PK)。 如果未定义PK,则Access窗体将无法更新和插入行,从而使表实际上是只读的。

我听说过一位开发人员在讲的一种技术。 这是如果您确实想要类似客户端服务器应用程序的东西。

  1. 创建分发给每个用户的.mdb / .mde前端文件(您将看到原因)。
  2. 对于每个需要执行CRUD的表,在#1中的文件中有一个本地副本。
  3. 表单保持链接到本地​​表。
  4. 编写VBA代码以处理从本地表到SQL Server数据库的CRUD。
  5. 报表可以基于从SQL Server创建的临时表(我认为无法在mde文件中创建临时表)。

一旦确定了如何使用单个表格来完成此操作,则将相同的技术应用于其余的表格并不太困难。 关于在本地表上使用表单的好处是,您可以将许多现有功能保留为现有应用程序(这就是为什么我希望并继续使用Access的原因)。 您只需要解决将数据来回传递到SQL Server的问题。

您可以继续拥有链接表,然后根据时间和性能需求逐步使用此技术逐步淘汰它们。

由于每个用户都有自己的本地文件,因此他们可以处理其数据的本地副本。 仅应将完成其任务所需的最低要求复制到本地。 示例:如果他们正在更新单个记录,则表将仅具有该记录。 用户添加新记录时,您会注意到该记录的ID字段为Null,因此需要插入语句。

我猜本地表的行为就像.NET中的数据集吗? 我确信这在某种程度上是不完美的比喻。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM