OLE DB Provider for Jet

Microsoft OLE DB Provider for Jet は Microsoft Access データベースに OLE DB インターフェイスを提供し、SQL Server 2005 以降の分散クエリに Access データベースおよび Excel ワークシートへのクエリを許可します。

Microsoft Office 2007 のドライバーをダウンロードするには、「2007 Office System ドライバー: データ接続コンポーネント」を参照してください。

ヒントヒント

Microsoft Access に接続するには、SQL Server から Microsoft Access データベース エンジンを起動する必要があります。他のほとんどのプロバイダーとは異なり、Microsoft Access は簡易プロバイダーではなく、必要な機能をすべて備えた Microsoft Access データベース エンジンです。SQL Server プロセス領域で Microsoft Access を開くと、ディスク、プロセッサ、またはメモリ リソースが不足してエラーが発生する場合があります。このエラーの内容は "OLE DB プロバイダーのデータ ソース オブジェクトを初期化できません" です。メモリ不足のエラーを回避するには、SQL Server メモリ プロセス領域の外部で開くようにプロバイダーを構成します。

SQL Server メモリ領域の外部で Microsoft Access を実行するには

  1. SQL Server Management Studio オブジェクト エクスプローラーで、SQL Server 名、[サーバー オブジェクト][リンク サーバー][プロバイダー] の順に展開し、Microsoft Access プロバイダーの [Microsoft.ACE.OLEDB.12.0] または [Microsoft.Jet.OLEDB.4.0] を右クリックして [プロパティ] をクリックします。

  2. [プロバイダー オプション] ボックスの [InProcess 許可] をオフにします。

  3. [OK] をクリックします。

Access データベースにアクセスするリンク サーバーを作成するには

  1. sp_addlinkedserver を実行してリンク サーバーを作成します。そのとき、Microsoft.Jet.OLEDB.4.0 を provider_name として指定し、Access .mdb データベース ファイルの完全なパス名を data_source として指定します。.mdb データベース ファイルはサーバーに存在している必要があり、data_source はクライアントではなくサーバー上で評価されます。また、パスはサーバー上で有効でなくてはなりません。

    たとえば、c:\mydata ディレクトリに存在する Nwind.mdb という名前の Access データベースに対して機能する Nwind というリンク サーバーを作成するには、次のようにします。

    sp_addlinkedserver 'Nwind', 'Access', 'Microsoft.Jet.OLEDB.4.0', 
       'c:\mydata\Nwind.mdb'
    
  2. セキュリティで保護されていない Access データベースにアクセスするためには、Access データベースにアクセスしようとしている SQL Server のログインに、パスワードのないユーザー名 Admin へのログイン マッピングを定義する必要があります。

    次の例では、Joe というローカル ユーザーが Nwind というリンク サーバーにアクセスできるようにします。

    sp_addlinkedsrvlogin 'Nwind', false, 'Joe', 'Admin', NULL
    

    セキュリティ保護された Access データベースにアクセスするには、Access によって使用されている正しいワークグループ情報ファイルを使用するように、レジストリ エディターを使用してレジストリを構成します。レジストリ エディターを使用して、Access で使用するワークグループ情報ファイルの完全なパス名を次のレジストリ エントリに追加してください。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB

  3. レジストリ エントリを構成した後、次のように sp_addlinkedsrvlogin を使用してローカル ログインから Access ログインへのログイン マッピングを作成します。

    sp_addlinkedsrvlogin 'Nwind', false, 'Joe',
        'AccessUser', '034fhd99dl'
    
セキュリティに関する注意セキュリティに関する注意

この例では、Windows 認証は使用されていません。したがって、パスワードは暗号化されずに送信されます。パスワードは、ディスク、バックアップ、およびログ ファイルに保存されたデータ ソース定義やスクリプトで参照できます。この種類の接続では、システム管理者のパスワードを使用しないでください。特定のユーザー環境のセキュリティについては、ネットワーク管理者に問い合わせてください。

Access データベースにはカタログ名とスキーマ名がありません。したがって、Access ベースのリンク サーバー内にあるテーブルは、分散クエリで linked_server**...**table_name という 4 つの部分から構成される名前を使用して参照できます。

次の例では、Nwind というリンク サーバーに存在する Employees テーブルのすべての行を取得します。

SELECT * 
FROM Nwind...Employees

Excel ワークシートに対してリンク サーバーを作成するには

Microsoft OLE DB Provider for Jet 4.0 を使用し、Microsoft Excel ワークシートにアクセスすることができます。

  • Excel ワークシートにアクセスするリンク サーバーを作成するには、次の例の形式を使用します。

    EXEC sp_addlinkedserver EXCEL,
         'Jet 4.0',
         'Microsoft.Jet.OLEDB.4.0',
         'c:\data\MySheet.xls', 
          NULL,
         'Excel 5.0;'
    
    GO
    
  • Excel ワークシートのデータにアクセスするには、セルの範囲を名前と関連付けます。名前付き範囲は、範囲の名前をテーブル名として使用することでアクセスできます。次のクエリを使用すると、前の例のリンク サーバーの設定を使用して SalesData という名前付き範囲にアクセスできます。

    SELECT *
    FROM EXCEL...SalesData
    GO
    

セルの名前付き範囲に 1 行を挿入すると、挿入した行は、そのセルの名前付き範囲の一部である最後の行の後ろに追加されます。したがって、列ヘッダーの後ろに行 rA を挿入する場合は、列ヘッダーのセルと名前を関連付け、その名前をテーブル名として使用します。セルの範囲は、行の挿入に応じて自動的に拡張されます。

書式付きテキストに対してリンク サーバーをセットアップするには

Microsoft OLE DB Provider for Jet を使用し、テキスト ファイルにアクセスし照会できます。

  • Access .mdb ファイルのテーブルとしてファイルをリンクせず、テキスト ファイルに直接アクセスするリンク サーバーを作成するには、次の例のように sp_addlinkedserver を実行します。

    プロバイダーは Microsoft.Jet.OLEDB.4.0、プロバイダー文字列は 'Text' です。データ ソースは、テキスト ファイルが格納されているディレクトリの完全なパス名です。Schema.ini ファイルは、テキスト ファイルと同じディレクトリに存在する必要があります。Schema.ini ファイルでは、テキスト ファイルの構造を記述します。Schema.ini ファイルの作成方法の詳細については、Jet Database Engine のマニュアルを参照してください。

    --Create a linked server.
    EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 
       'Microsoft.Jet.OLEDB.4.0',
       'c:\data\distqry',
       NULL,
       'Text'
    GO
    
    --Set up login mappings.
    EXEC sp_addlinkedsrvlogin txtsrv, FALSE, NULL, Admin, NULL
    GO
    
    --List the tables in the linked server.
    EXEC sp_tables_ex txtsrv
    GO
    
    --Query one of the tables: file1#txt
    --by using a four-part name. 
    SELECT * 
    FROM txtsrv...[file1#txt]