如何通过OPENROWSET函数向SQL Server导入带工作组(mdw)保护的Access数据库数据(转)
注:找这个解决方法很辛苦,有些笨拙,但还好,可以解决问题。适用于SQL Server 2000
原文出自:如何在链接服务器中使用 SQL Server 7.0 分布式查询来访问受保护的 Access 数据库(http://support.microsoft.com/?kbid=246255)
?
Microsoft SQL Server 7.0 版提供了通过使用 OLE DB 提供程序对不同数据库执行查询的功能。可以使用以下方式查询数据库:
- OpenQuery 或 OpenRowset Transact-SQL 函数。
- 或 - - 具有四部分名称(包括链接服务器名称)的查询。要将链接服务器设置为访问受保护的 Microsoft Access 数据库,请使用下列步骤:
- 使用注册表编辑器将注册表配置为使用正确的 Microsoft Access 工作组信息文件(.mdw 文件),然后向以下注册表项中添加工作组信息文件的完整路径名:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB接下来,将其值设置为该文件的路径和名称,例如:
C:\...\MySystem.mdw- 要打开注册表编辑器,请定位到“开始”按钮,然后单击“运行”。在“运行”对话框中,键入 Regedit,然后按“确定”。
- 在注册表编辑器中,定位到以下项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\
- 单击右键,然后依次选择“新建”、“字符串值”。
- 键入?SystemDb,然后按?Enter。
- 双击左窗格中的“SystemDb”项。
- 在“数值数据”文本框中,键入 .mdw 文件的完整路径。
- 关闭注册表编辑器。
- 执行?sp_addlinkedserver?存储过程创建链接服务器。指定 Microsoft.Jet.OLEDB.4.0 作为 provider_name,并指定 Microsoft Access .mdb 数据库文件的完整路径名作为 data_source。data_source 将在服务器而不是客户端上进行计算,因此该路径在服务器上必须有效。
- 执行?sp_addlinkedsrvlogin?存储过程创建从本地登录到 Microsoft Access 登录的登录映射。
回到顶端
查询受保护的 Microsoft Access 数据库的步骤
- 修改步骤 1(请参见“更多信息”部分)中显示的注册表项并添加 .mdw 文件的位置。
- 启动 Microsoft Visual Basic 6.0 并选择一个标准 EXE 项目。默认情况下会创建 Form1。
- 在“项目”菜单上,选择“引用”,然后将其中一个引用设置为“Microsoft ActiveX Data Objects 2.1 库”(或更高版本)。
- 在 Form1 上放置两个命令按钮和一个 DataGrid 控件(分别名为 Command1、Command2 和 DataGrid1)。
- 将以下代码粘贴到 Form1 的“声明”部分中:
注意:在运行此代码之前,必须将 User ID=<User ID> 和 password=<Strong Password> 更改为正确的值。请确保该用户 ID 具有在数据库中执行此操作所需的适当权限。 - 运行该项目。
- 单击“设置链接服务器”。如果将连接字符串中的?sp_addlinkedserver?和sp_addlinkedsrvlogin?修改为正确的参数,则可以成功创建链接服务器。
- 单击“查询链接服务器”。如果将连接字符串和查询文本修改为正确的参数,将使用您的数据填充 DataGrid 控件。
回到顶端
- 使用注册表编辑器将注册表配置为使用正确的 Microsoft Access 工作组信息文件(.mdw 文件),然后向以下注册表项中添加工作组信息文件的完整路径名:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB接下来,将其值设置为该文件的路径和名称,例如: