日期:2014-05-16  浏览次数:20527 次

如何通过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 数据库,请使用下列步骤:
  1. 使用注册表编辑器将注册表配置为使用正确的 Microsoft Access 工作组信息文件(.mdw 文件),然后向以下注册表项中添加工作组信息文件的完整路径名:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB
    接下来,将其值设置为该文件的路径和名称,例如:

    C:\...\MySystem.mdw
    1. 要打开注册表编辑器,请定位到“开始”按钮,然后单击“运行”。在“运行”对话框中,键入 Regedit,然后按“确定”。
    2. 在注册表编辑器中,定位到以下项:
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\
    3. 单击右键,然后依次选择“新建”、“字符串值”。
    4. 键入?SystemDb,然后按?Enter
    5. 双击左窗格中的“SystemDb”项。
    6. 在“数值数据”文本框中,键入 .mdw 文件的完整路径。
    7. 关闭注册表编辑器。
  2. 执行?sp_addlinkedserver?存储过程创建链接服务器。指定 Microsoft.Jet.OLEDB.4.0 作为 provider_name,并指定 Microsoft Access .mdb 数据库文件的完整路径名作为 data_source。data_source 将在服务器而不是客户端上进行计算,因此该路径在服务器上必须有效。
  3. 执行?sp_addlinkedsrvlogin?存储过程创建从本地登录到 Microsoft Access 登录的登录映射。
回到顶端

查询受保护的 Microsoft Access 数据库的步骤

  1. 修改步骤 1(请参见“更多信息”部分)中显示的注册表项并添加 .mdw 文件的位置。
  2. 启动 Microsoft Visual Basic 6.0 并选择一个标准 EXE 项目。默认情况下会创建 Form1。
  3. 在“项目”菜单上,选择“引用”,然后将其中一个引用设置为“Microsoft ActiveX Data Objects 2.1 库”(或更高版本)。
  4. 在 Form1 上放置两个命令按钮和一个 DataGrid 控件(分别名为 Command1、Command2 和 DataGrid1)。
  5. 将以下代码粘贴到 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"