Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > ADP及SQL SERVER

使用“升迁向导”将 Access 数据移动至 SQL Server 数据库

时 间:2013-06-05 08:31:48
作 者:宏鹏(转载)   ID:21115  城市:上海
摘 要:随着时间的推移,大多数数据库应用程序都会增大,变得更加复杂,而且需要支持更多的用户。在 Microsoft Office Access 应用程序生命周期的某个时刻,您可能要考虑将其升迁至 Microsoft SQL Server 数据库以优化性能、可伸缩性、可用性、安全性、可靠性和可恢复性。
正 文:

本文内容

·        关于升迁 Microsoft Office Access 数据库

·        使用升迁向导

·        数据库对象如何得到升迁

关于升迁 Microsoft  Office Access 数据库

升迁是将部分或全部数据库对象 Access 数据库迁移至新的或现有的 SQL Server 数据库或新的 Microsoft Access 项目 (.adp) 的过程。

将数据库升迁至 SQL Server 的好处

·    高性能和高可伸缩性    在许多情况下,SQL Server 提供的性能都优于 Access 数据库。SQL Server 还支持非常大的、以千吉字节度量的数据库,这比当前两吉字节限制的 Access 数据库大得多。最后,SQL Server 以并行方式处理查询(在单一进程内使用多个本机线程处理用户请求),而且在增加更多用户时最大限度地降低额外的内存需求,从而非常高效地工作。

·    可用性更好    SQL Server 允许您对使用中的数据库进行增量或完整的动态备份。这样您就不必强制用户退出数据库来备份数据。

·    安全性提高    使用可信连接,SQL Server 可与 Windows 系统安全集成,利用两个安全系统的最佳优势提供对网络和数据库的单一集成访问。这使其更容易管理复杂的安全架构。

·    即时可恢复性    在出现系统故障时(例如操作系统崩溃或停电),SQL Server 具有的自动恢复机制可在几分钟内将数据库恢复到上一个一致的状态,而无需数据库管理员的干预。

·   基于服务器的处理    在客户端/服务器配置中使用 SQL Server 可降低网络流量,原因是会先在服务器上处理数据库查询,然后再将结果发送至客户端。让服务器进行处理通常要高效得多,特别是在处理大型数据集时。

您的应用程序也可以使用服务器(而不是客户端)上的用户定义的函数存储过程触发器集中和共享应用程序逻辑、业务规则和策略、复杂查询、数据有效性和引用完整性代码。

升迁方法

升迁向导可以将数据库对象及其包含的数据从 Access 数据库移至新的或现有的 SQL Server 数据库中。

可通过三种方法使用升迁向导

·     所有数据库对象从 Access 数据库升迁至 Access 项目,以便可以创建客户端/服务器应用程序。此方法需要对代码和复杂查询进行一些额外的应用程序更改和修改。

·     将数据或数据定义从 Access 数据库升迁至 SQL Server 数据库。

·      Access 数据库前端和 SQL Server 数据库后端,以便可以创建前端/后端应用程序。此方法需要非常少的应用程序修改,因为代码仍然使用 Access 数据库引擎 (ACE)

升迁 Access 数据库之前

在将 Access 数据库升迁至 SQL Server 数据库或 Access 项目之前,请考虑执行以下操作:

·     备份您的数据库     虽然升迁向导不会从 Access 数据库中删除任何数据或数据库对象,但是先创建 Access 数据库的备份副本,然后再升迁仍不失为一个好主意。

·     确保您有足够的磁盘空间     必须在将包含升迁数据库的设备中具有足够的磁盘空间。有充足的可用磁盘空间时升迁向导运行状态最佳。

·     创建唯一索引     Access 中,链接表必须具有可更新的唯一索引。升迁向导可以升迁现有的唯一索引,但是无法在不存在的情况下创建一个。如果希望能够更新表,请确保向每个 Access 表添加唯一索引,然后再升迁。

·     SQL Server 数据库中为自己分配适当的权限

·     若要升迁现有数据库,您需要具有 Create TABLE Create DEFAULT 权限。

·     若要构建新数据库,您需要具有 Create DATABASE 权限以及在 Master 数据库的系统表中具有 Select 权限。

Access 2007 升迁向导已经过优化,可以用于 Microsoft SQL Server 2000 SQL Server 2005  

使用升迁向导

·     数据库工具选项卡上的移动数据组中,单击“SQL Server” 将启动升迁向导

·        步骤 1:选择升迁至现有数据库或新数据库

·        步骤 2:选择要升迁的表

·        步骤 3:指定要升迁的属性和选项

·        步骤 4:选择升迁应用程序的方式

步骤 1:选择升迁至现有数据库或新数据库

在向导的第一页上,指定是要将 Access 数据库升迁至现有 SQL Server 数据库还是创建新的 SQL Server 数据库。

·      使用现有数据库    如果选择此选项并单击下一步Access 将显示选择数据源对话框,以便您可以创建至现有 SQL Server 数据库的 ODBC 数据源连接。

关于 ODBC 数据源

数据源是数据的来源,其中包含访问该数据所需的连接信息。AccessSQL ServerOracle RDBMS、电子表格以及文本文件都是数据源的示例。连接信息的示例包括服务器位置、数据库名称、登录 ID、密码以及说明如何连接到数据源的各种 ODBC 驱动程序选项。

ODBC 体系结构中,应用程序(例如 Access Microsoft Visual Basic 程序)连接到 ODBC 驱动程序管理器,然后该驱动程序管理器使用特定的 ODBC 驱动程序(例如 Microsoft SQL ODBC 驱动程序)连接到数据源(在此例中为 SQL Server 数据库)。在 Access 中,您使用 ODBC 数据源连接到 Access 外部的数据源(没有内置驱动程序)。

若要连接到这些数据源,必须执行以下操作:      
在包含数据源的计算机上安装适当的 ODBC 驱动程序。        
使用“ODBC 数据源管理器将连接信息存储在 Microsoft Windows 注册表或 DSN 文件中,或者使用 Visual Basic 代码中的连接字符串将连接信息直接传递给 ODBC 驱动程序管理器,从而来定义数据源名称 (DSN)

计算机数据源

计算机数据源在特定计算机的 Windows 注册表中存储连接信息(具有用户定义的名称)。只能在定义计算机数据源的计算机上使用这些数据源。有两种类型的计算机数据源用户和系统。用户数据源只能由当前用户使用且仅对该用户可见。系统数据源可由计算机上的所有用户使用且对计算机和系统范围服务的所有用户可见。计算机数据源在您要提供更高的安全性时特别有用,因为只有登录的用户可以查看计算机数据源,且计算机数据源不能被远程用户复制到其他计算机中。

文件数据源

文件数据源(也称为 DSN 文件)在文本文件而不是 Windows 注册表中存储连接信息,而且使用起来通常比计算机数据源更加灵活。例如,可以将文件数据源复制到具有正确 ODBC 驱动程序的任何计算机中,以便应用程序可以将一致、准确的连接信息利用到它所使用的所有计算机。您也可以将文件数据源放到一个服务器上,在网络中的许多计算机之间共享它,并在一个位置轻松维护连接信息。

文件数据源也可以是非共享的。非共享的文件数据源驻留在单台计算机上,并指向一个计算机数据源。使用非共享的文件数据源可以从文件数据源访问现有的计算机数据源。

连接字符串

您可以在模块中定义指定连接信息的格式化连接字符串。连接字符串可将连接信息直接传递给 ODBC 驱动程序管理器,而且可以使系统管理员或用户不必先创建 DSN 然后再使用数据库,从而简化您的应用程序。

·        新建数据库    如果选择此选项并单击下一步Access 将显示要求您输入有关新 SQL Server 数据库的信息的页面。         

·      请选择升迁该数据库所用的 SQL Server:     键入要使用的服务器的名称。         

·      使用可信连接     可以使用可信连接,即 SQL Server 可以与 Windows 操作系统安全集成以提供对网络和数据库的单一登录。

·      登录 ID 和密码     如果不使用可信连接,请键入在服务器上拥有 Create DATABASE 权限的帐户的登录 ID 和密码。

·      请指定升迁后的 SQL Server 数据库的名称:     键入新 SQL Server 数据库的名称。如果与现有数据库名称冲突,Access 将修改该名称,并添加数字后缀(例如 mydatabase 1)。

步骤 2:选择要升迁的表

在此步骤中,选择要升迁至 SQL Server 数据库的 Access 表。选择您要升迁的表,然后使用箭头按钮将其移至导出到 SQL Server”列表。还可以双击表将其从一个列表移动到另一列表。

可用表列表中包含除了已经在 SQL Server 数据库中的 SQL Server 表以外的所有链接表。指向已经选择用于升迁的 SQL Server 数据库的链接表会自动出现在导出到 SQL Server”列表框中且无法删除。还会排除当前在导航窗格中不可见的表,包括隐藏的表和系统表。

 提示   名称以“_local”结尾的所有表都会从可用表列表中排除,以防止升迁已经升迁过的表。如果确实要再次升迁这些表,请通过删除后缀“_local”对其进行重命名,然后再运行升迁向导

步骤 3:指定要升迁的属性和选项

在此步骤中,选择要升迁至 SQL Server 数据库的表属性。默认情况下,所有属性都选择进行升迁。

 注释   默认情况下,升迁向导 Access 字段名转换为合法的 SQL Server 字段名,并且将 Access 数据类型转换为等效的 SQL Server 数据类型。

升迁下列表属性

下表列出了可以升迁的属性,并说明了升迁向导如何处理每个属性:

 

属性 选中时的操作
索引

“升迁向导”升迁所有索引。

“升迁向导”将 Access 主键转换为 SQL Server 索引并将其标记为 SQL Server 主键。如果选择将升迁的 SQL Server 表链接至 Access 数据库,则“升迁向导”还会在索引名称前添加“aaaaa”前缀。这是因为 Access 选择可用索引列表中按字母顺序排在第一位的索引作为主键,而“aaaaa”前缀确保选择正确的索引。

其他所有索引会保留其名称,只是会用“_”字符替换非法字符。唯一和非唯一 Access 索引会成为唯一和非唯一 SQL Server 索引。

在 Access 中,链接表必须具有可更新的唯一索引。“升迁向导”可以升迁现有的唯一索引,但是无法在不存在的情况下创建一个。如果希望能够在升迁后更新表中的数据,请确保向每个 Access 表添加唯一索引,然后再升迁。

有效性规则

“升迁向导”会升迁下列 update 和 insert 触发器

  • 所有的“必需”字段属性
  • 表有效性规则
  • 记录有效性规则
  • 字段有效性规则

触发器是一系列与 SQL Server 表关联的 Transact-SQL 语句。一个表可以有三个触发器,每个触发器用于可以修改表中数据的一个命令:Update、Insert 和 Delete 命令。执行命令时会自动执行触发器。“升迁向导”使用触发器而不是 SQL Server 规则来实现字段级有效性,因为 SQL Server 规则不允许显示自定义错误消息。

每个有效性规则不一定与触发器一一对应。每个有效性规则可能会成为多个触发器的组成部分,每个触发器可能包含用于模拟多个有效性规则的功能的代码。

当您将 Access 字段的“必需”属性设置为 true 时,用户将无法插入记录并将必需字段保留为 null(如果没有到该字段的默认绑定)或者在更新记录时使该字段为 null。必需字段将升迁为 SQL Server 中不允许为Null 值的字段。

有效性文本

Access 数据库的“有效性文本”属性将转换为 Access 项目的“有效性文本”属性。这使在运行时违反约束时可以显示 Access 友好的错误消息。

“升迁向导”会将所有“默认值”属性升迁为 ANSI 字符集默认对象。
表关系

“升迁向导”会升迁所有表关系。

您可以使用 update、insert 或 delete 触发器或者使用声明的引用完整性 (DRI) 决定如何升迁表关系和引用完整性。DRI 与 Access 引用完整性的工作方式相同,即通过定义基表(一对多关系中的“一”端)的主键约束和外部表(通常为一对多关系中的“多”端)的外键约束来工作。

  • 使用 DRI     选择“表关系”“使用 DRI”使用 DRI 来实现引用完整性。Access 数据库列有效性将转换为带有验证消息的 SQL Server DRI check 约束,如下表中所示。
ACCESS 数据库关系 SQL SERVER  有效性文本
级联更新 ON Delete NO ACTION ON Update CASCADE “因为表‘<外表>’包含相关记录,所以无法删除该记录。”
级联删除 ON Delete CASCADE ON Update NO ACTION “由于表‘<主表>’需要一相关记录,所以您无法添加或更改记录。”
级联更新
和级联删除
ON Delete CASCADE ON Update CASCADE 未设置值。
无 DRI ON Delete NO ACTION ON Update NO ACTION 因为表‘<主表>’和‘<外表>’之间的关系限制,您无法添加、更改或删除该记录。
  • 使用触发器     如果您在 Access 表关系中定义了级联更新或删除,而且希望在已升迁的表中保留此行为,请选择“表关系”“使用触发器”。这样可将级联更新或删除升迁为触发器以实现引用完整性。

表关系不一定与触发器一一对应。每个关系可能会成为多个触发器的组成部分,或者每个触发器可能包含用于模拟多个引用完整性规则的功能的代码。Insert 触发器用在子表上,delete 触发器用在父表上。

 注释   Access 需要 DRI 来读取 SQL Server 数据库的数据库图表。为了允许 Access 在通过触发器实现引用完整性时读取数据库图表,“升迁向导”会将 DRI 置于关系上,但会关闭对外键约束的检查。

包括下列数据选项

·         请确定是否向表添加时间戳字段    SQL Server 使用时间戳字段指示记录已更改(但不是在其更改时),方法是创建唯一值字段,然后在记录更新时更新此字段。对于链接表,Access 使用时间戳字段中的值确定记录是否已更改,然后再更新。通常,时间戳字段可提供最佳性能和可靠性。如果没有时间戳字段,SQL Server 必须检查记录中的所有字段以确定记录是否已更改,这样会降低性能。

下表描述了此列表中可用的设置:

设置 说明
是的,由向导确定 如果原始 Access 表包含浮点(单或双)、“备注”数据类型 OLE 对象字段,“升迁向导”将在生成的 SQL Server 表中为这些字段创建新时间戳字段。
是的,始 “升迁向导”为所有升迁的表创建时间戳字段,不论它们包含什么字段类型。这样可提高升迁的 Access 表的性能,其中可能不包含“备注”、OLE 对象或浮点字段,但是有其他类型的字段。
不,从不 “升迁向导”不向表中添加时间戳字段。

要点链接的SQL Server 表中,Access 不会检查以确定备注 OLE 对象字段是否已更改,因为这些字段的大小可能有许多兆字节,进行比较可能太占用网络而且非常耗时。因此,仅当文本或图像字段更改且不存在时间戳字段时,Access 才会覆盖更改。此外,浮点字段的值在未更改时也可能显示为已更改,因此在不存在时间戳字段时,Access 可能会在记录未更改时确定其已更改。

·      只创建表结构;不升迁任何数据    默认情况下,升迁向导将所有数据升迁至 SQL Server。如果选中只创建表结构;不升迁任何数据复选框,则将仅升迁数据结构。

步骤 4:选择升迁应用程序的方式

在向导的下一页上,可以选择三种不同的方式之一来升迁 Access 数据库应用程序。在请选择对应用程序采取的措施中,选择下列选项之一:

 ·      创建一个新的 Access 客户机/服务器应用程序    如果选择此选项,升迁向导将创建新的 Microsoft Access 项目升迁向导会提示您输入名称(默认为当前 Access 数据库的名称),添加“CS”后缀,然后将该项目存储在现有的 Access 数据库所在的位置。

升迁向导创建 Access 项目文件,然后将 Access 数据库中的所有数据库对象升迁至 Access 项目。如果不保存密码和用户 ID,则您首次打开 Access 项目时,Access 会显示数据链接属性对话框,以便可以连接到 SQL Server 数据库。

 ·      SQL Server 表链接到现有的应用程序    如果选择此选项,升迁向导会修改 Access 数据库,以便查询、窗体、报表和数据访问页使用新 SQL Server 数据库中的数据,而不是 Access 数据库中的数据。升迁向导会用后缀“_local”重命名升迁的 Access 表。例如,如果升迁名为 Employees 的表,则 Access 数据库中的该表将重命名为 Employees_local。然后,升迁向导会创建一个名为 Employees 的链接 SQL Server 表。

 注释   升迁操作完成后,将不再使用用“_local”后缀重命名的表。但是,确定升迁成功之前保留本地表仍不失为一个好主意。以后,可以删除本地表以减小 Access 数据库的大小。在删除任何表之前请务必备份数据库。

 现在,基于原始 Employees 表的查询、窗体、报表和数据访问页将使用链接的 SQL Server Employees 表。原始本地表中的字段的许多属性都会被新的本地表继承,包括说明标题格式输入掩码小数位置

·     不对应用程序做任何更改    仅当您要将数据复制到 SQL Server 数据库且不对现有的 Access 数据库应用程序做任何其他更改时才选择此选项。

·      保存密码和用户 ID    默认情况下,升迁向导在现有应用程序中创建链接表或创建 Access 项目,而不保存用户名和密码。这意味着,每次用户登录 SQL Server 数据库时都会被提示输入用户名和密码。

如果选择保存密码和用户 ID”,用户无需登录就可以连接到 SQL Server 数据库。如果选择创建一个新的 Access 客户机/服务器应用程序Access 项目会将用户名和密码存储在 OLE DB 连接字符串中。

 注释   如果链接的 SQL Server 表配置有 MSysConf 表以拒绝保存密码,则对不对应用程序做任何更改选项禁用此选项。

升迁向导报告

单击完成后,升迁向导会创建一份报告,提供创建的所有对象的详细说明并报告升迁过程中遇到的所有错误。升迁向导会在打印预览中显示该报告,然后您可以打印或保存该报告,例如,将其保存为 XPS PDF 文件。关闭打印预览窗口时,该报告不会保存为 Access 对象。

升迁向导报告包含下列信息:

·         升迁参数,包括您选择升迁的表属性以及升迁方式。

·         表信息,包括名称、数据类型、索引、有效性规则、默认值、触发器的 Access 值和 SQL Server 值的比较,以及是否添加了时间戳。

·         遇到的所有错误,例如数据库或事务日志已满、权限不足、设备或数据库未创建、表、默认值或有效性规则被略过、关系未实现、查询被略过(由于无法转义为 SQL Server 语法),以及窗体和报表中的控件记录源转换错误。

数据库对象如何得到升迁

下列数据和数据库对象会得到升迁:

·         数据和数据类型    所有的 Access 数据库数据类型都会转换为 SQL Server 中的等效类型。向导会通过向所有字符串值添加 Unicode 字符串标识符和向所有数据类型添加 Unicode n 前缀将 Access 数据库文本转换为 Unicode

·         查询    

·         没有 orDER BY 子句或参数的选择查询会转换为视图。

·         操作查询会转换为存储过程操作查询。Access 会在参数声明代码后添加 SET NOCOUNT ON 以确保存储过程运行。

·         仅引用使用参数或 orDER BY 子句的表的选择查询(也称为基本查询)会转换为用户定义函数。如有必要,TOP 100 PERCENT 子句会添加到包含 orDER BY 子句的查询中。

·         使用命名参数的参数查询会保留 Access 数据库中使用的原始文本名称,并将转换为存储过程或内嵌的用户定义函数。

  注释   您可能需要手动转换未升迁的查询,例如 SQL 传递查询数据定义查询以及交叉表查询。可能还必须手动升迁嵌套太深的查询。

·         窗体、报表和控件    窗体、报表或控件的 RecordSourceControlsSource  RowSource 属性中的 SQL 语句保持不动且不会转换为存储过程或用户定义函数。

·         启动属性    “升迁向导会升迁下列启动属性:

StartUpShowDBWindow

 StartUpShowStatusBar

 AllowShortcutMenus

 AllowFullMenus

 AllowBuiltInToolbars

 AllowToolbarChanges

 AllowSpecialKeys

 UseAppIconForFrmRpt

 AppIcon

 AppTitle

 StartUpForm

 StartUpMenuBar

 StartupShortcutMenuBar

·      模块和宏    “升迁向导不会对模块或宏做任何更改。您可能需要修改应用程序以充分利用 SQL Server 的功能。有关详细信息,请参阅 MSDN 文章对链接至 SQL Server Microsoft
Office Access
应用程序进行优化
(英文)。




Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助