注:找这个解决方法很辛苦,有些笨拙,但还好,可以解决问题。适用于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 工作组信息文件(.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 具有在数据库中执行此操作所需的适当权限。Dim adorst As New ADODB.Recordset Dim adoconn As New ADODB.Connection Private Sub Command1_Click() Dim strConn As String adoconn.Open "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=master;User Id=<User ID>;Password=<Strong Password>;" adoconn.Execute "EXEC sp_addlinkedserver 'SecuredJetLS', 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', 'c:\.....\MyDatabase.mdb'" adoconn.Execute "EXEC sp_addlinkedsrvlogin 'SecuredJetLS', FALSE, NULL, 'UserName', 'Password'" adoconn.Close MsgBox "Successful Setup" End Sub Private Sub Command2_Click() Dim SQL As String ' Using OpenQuery syntax. SQL = " Select a.* from OPENQUERY(SecuredJetLS, 'Select * from MyTable') a" ' Using OpenRowset syntax. ' SQL = "SELECT * From OpenRowset('Microsoft.Jet.OLEDB.4.0','c:\....\MyDatabase.mdb'; 'UserName';'Password', MyTable)" ' Using four-part name syntax. ' SQL = "Select * from SecuredJetLS...MyTable" adoconn.CursorLocation = adUseClient adoconn.Open "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=master;User Id=<User ID>;Password=<Strong Password>;" adorst.Open SQL, adoconn, adOpenStatic, adLockReadOnly Set DataGrid1.DataSource = adorst End Sub Private Sub Form_Load() Command1.Caption = "Setup Linked Server" Command2.Caption = "Query Linked Server" End Sub Private Sub Form_Unload(Cancel As Integer) adorst.Close Set adorst = Nothing adoconn.Close Set adoconn = Nothing End Sub
- 运行该项目。
- 单击“设置链接服务器”。如果将连接字符串中的 sp_addlinkedserver 和sp_addlinkedsrvlogin 修改为正确的参数,则可以成功创建链接服务器。
- 单击“查询链接服务器”。如果将连接字符串和查询文本修改为正确的参数,将使用您的数据填充 DataGrid 控件。