リンクされたテーブルを作成する
Microsoft Office 2000/Visual Basic プログラマーズ ガイド |
外部データベースからテーブルをリンク付けると、Access データベースのテーブルと同様に、データの読み込み、データの更新や追加 (多くの場合) およびそのテーブルを使用するクエリの作成が可能となります。Microsoft Jet データベース エンジンにより、Microsoft Jet のインストール可能な ISAM ドライバ (Excel、dBase、Paradox、Exchange/Outlook、Lotus WKS、Text、および HTML) およびODBC ドライバでサポートされているそのほかのデータ形式を含め、Access データベースのテーブルへリンク付けることができます。
ADO および ADOX では、Access データベースおよびインストール可能な ISAM からリンクされたテーブルと、ODBC ドライバを使用してリンク付けられたテーブルが区別されます。ADO OpenSchema メソッドを使用して、adSchemaTables を QueryType 引数として指定し、データベースのテーブルについて説明する Recordset オブジェクトを返す場合、TABLE_TYPE フィールドは、リンクされた Access テーブルとインストール可能な ISAM テーブルに "LINK" (リンク) を返しますが、ODBC ドライバを使用してリンクされたテーブルについては、"PASS-THROUGH" (パススルー) を返します。これは、ADOX Table オブジェクトの Type プロパティについても同様です。これは、読み取り専用の dbAttachedTable 引数および adAttachedODBC 引数で DAO Attributes プロパティを使用する場合と同じです。
リンクされた Access テーブルを作成する
ADOX および Microsoft Jet 4.0 OLE DB プロバイダを使用して、リンクされた Access テーブルを作成するには、外部データ ソースへのパスと外部テーブル名を指定してください。プロバイダ別の Jet OLEDB:Link Datasource および Jet OLEDB:Remote Table Name プロパティでパスと名前を指定します。さらに、ADOX でほかの任意のデータ ソースにリンクさられたテーブルを作成するには、Jet OLEDB:Create Link プロパティ を True に設定してください。
次は、別の Access データベースでテーブルをリンクする例です。
Sub CreateLinkedAccessTable(strDBLinkFrom As String, _
strDBLinkTo As String, _
strLinkTbl As String, _
strLinkTblAs As String)
Dim catDB As ADOX.Catalog
Dim tblLink As ADOX.Table
Set catDB = New ADOX.Catalog
' リンクを作成するデータベース内の Catalog を開きます。
catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strDBLinkFrom
Set tblLink = New ADOX.Table
With tblLink
' 新規 Table に名前を付け、その ParentCatalog プロパティを開いている
' Catalog に設定し、Properties コレクションへのアクセスを可能にします。
.Name = strLinkTblAs
Set .ParentCatalog = catDB
' プロパティを設定してリンクを作成します。
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Datasource") = strDBLinkTo
.Properties("Jet OLEDB:Remote Table Name") = strLinkTbl
End With
' テーブルを Tables コレクションに関連付けます。
catDB.Tables.Append tblLink
Set catDB = Nothing
End Sub
CreateLinkedAccessTable プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダ に含まれる DataAccess.mdb サンプル ファイルの CreateDatabase モジュールにあります。
Microsoft Jet エンジンにより、外部データ ソースのテーブル定義に基づいて、自動的に適切なフィールドが作成されるため、リンクされたテーブルのテーブル構造を定義する必要はありません。
リンクされた外部テーブルを作成する
ADO と ADOX では、Jet I-ISAM ドライバでリンクされたテーブルと、ODBCデータ ソースからリンクされたテーブルが区別されますが、リンクされた各種外部テーブルの作成に使用するメソッドは同じです。ADOX および Microsoft Jet 4.0 OLE DB プロバイダを使用してリンクされた外部テーブルを作成するには、プロバイダ別の Jet OLEDB:Link Provider String プロパティで、Microsoft Jet 接続テキストを設定し、外部テーブルへの接続方法を指定してください。I-ISAM テーブルの場合は、接続テキストで、I-ISAM タイプと外部データ ソースへのパスを指定できます。ODBC テーブルの場合は、接続テキストで、データ ソースへの接続に必要な ODBC 接続テキストを指定できます。次に、プロバイダ別の Jet OLEDB:Remote Table Name プロパティを使用して、リンク先のデータ型に応じたソース テーブル名を指定します。たとえば、Excel ワークシートの場合、ソース テーブルによりワークシート全体、名前の付いた範囲、または名前の付いていない範囲を参照できますが、Microsoft Exchange または Outlook の場合、メールを保存しているフォルダを参照します。リンクされた Access テーブルの作成時と同様に、Jet OLEDB:Create Link プロパティを True に設定してください。次のサンプル コードは、任意の I-ISAM または ODBCデータ ソースにリンクされたテーブル作成に使用できます。
Sub CreateLinkedExternalTable(strTargetDB As String, _
strProviderString As String, _
strSourceTbl As String, _
strLinkTblName As String)
Dim catDB As ADOX.Catalog
Dim tblLink As ADOX.Table
Set catDB = New ADOX.Catalog
' リンクを作成するデータベース内の Catalog を開きます。
catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strTargetDB
Set tblLink = New ADOX.Table
With tblLink
' 新規 Table に名前を付け、その ParentCatalog プロパティを開いている
' Catalog に設定し、Properties コレクションへのアクセスを可能にします。
.Name = strLinkTblAs
Set .ParentCatalog = catDB
' プロパティを設定してリンクを作成します。
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = strProviderString
.Properties("Jet OLEDB:Remote Table Name") = strLinkTbl
End With
' テーブルを Tables コレクションに関連付けます。
catDB.Tables.Append tblLink
Set catDB = Nothing
End Sub
CreateLinkedExternalTable プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに含まれる DataAccess.mdb サンプル ファイルの CreateDatabase モジュールにあります。
このプロシージャを使用するには、strProviderString **** 引数の正しい Jet 接続テキストを設定して外部データ ソースへの接続を確立してください。また、strSourceTbl 引数の正確なテキストを指定し、リンク先の Exchange フォルダまたは Excel の範囲などのソース テーブルを確認する必要もあります。以下に続くトピックでは、Jet 接続テキストの作成方法およびExcel、HTML、Microsoft Exchange または Outlook、および ODBC データ ソースのソース テーブルの指定方法について説明します。
ヒント 外部データ ソースのリンクに必要な Jet 接続テキストを設定する簡単な方法は、Access で [ファイル] メニュー の [外部データの取り込み] サブメニュー から [テーブルのリンク] を使用してリンクしたテーブルを作成することです。次に、デザイン ビューでリンクされたテーブルを開き、[表示] メニューの [プロパティ] から [テーブル プロパティ] ダイアログ ボックスを表示します。リンクされたテーブルの [説明] プロパティに、テーブルのリンクに使用された接続テキストが表示されます。[説明] プロパティ内でクリックして Shift キーを押しながら、F2 キーを押すことにより、長い接続テキストを表示できます。
基本的な Jet I-ISAM 接続テキストの構文
開くデータ ソースの指定には、すべての Jet I-ISAM ドライバに、次のように同じ基本的な構文の接続テキストを使用します。
"identifier;source;options"
identifier 引数は、開かれているファイルの種類を指定するキーワードです。これは、外部データ ソースを開く際に Connection オブジェクトの Extended Properties プロパティで使用するテキストと同じです。たとえば、Excel 97 または Excel 2000 のブックを開く際、Excel 8.0 が使用されます。Microsoft Jet 4.0 データベース エンジンでサポートされているすべてのデータベースのための Extended Properties プロパティの設定は、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダに含まれる ADOProperties.doc の「Extended Properties プロパティ設定」を参照してください。
source 引数には、ドライブ名または転送プロトコル (http:// または ftp://)、完全で有効なパス、および開こうとするファイルの名前が含まれます。source 引数は常に DATABASE**=** で始まります。
options 引数は、I-ISAM ドライバにオプションの引数 (パスワードなど) を追加指定する、またはスプレッドシート ファイルに指定された最初の列に行ヘッダーの情報が含まれることを表わすために使用します。複数の引数は、セミコロンで区切られます。
Excel ブックをリンクさせる
Excel ワークシートを開く接続テキストの書式は次のようになります。
"identifier;DATABASE={drive**:\** | FTP:// | HTTP://}path**\filename.xls** [;HDR={Yes | No}]"
identifier は開く Excel バージョンの適切なデータ ソースの識別子となります (完全なリストについては、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダに含まれる ADOProperties.doc の「Extended Properties プロパティ設定」を参照)。drive、path、および filename はデータ ソース ファイルを指定し、HDR は最初の行をヘッダーとして使用するかを示します (最初の行をフィールド名として使用する場合は Yes に設定し、データとして使用する場合は No に設定します)。
CreateLinkedExternalTable プロシージャの strSourceTbl 引数により、リンクさせるデータを指定し、その値を Jet OLEDB:Remote Table Name プロパティに渡します。Microsoft Excel 5.0、7.0 (95)、8.0 (97)、または 9.0 (2000) ブックをリンクさせる際は、使用可能なデータのサブセットを指定できます。1 つのワークシート、ブック内の名前の付いた任意の範囲、または 1 つのワークシート内の名前の付いていない範囲をリンクできます。次の表は、目的のデータのサブセットを指定するために使用する構文の一覧です。
アクセスするオブジェクト | 使用する構文 |
ブック ファイル内のワークシート全体 | sheetname$
sheetname は、ワークシート名になります。 重要 ワークシート名の後にドル記号 ($) を付けます。シート名の後に付けられたドル記号は、単なるシートの範囲ではなく、シート全体を参照する I-ISAM ドライバを表わします。 |
ワークシートまたはブック ファイル内で名前の付いたセル範囲 | namedrange
namedrange は、Microsoft Excel で、以前にその範囲に割り当てられた名前です。 |
ブック ファイルにある 1 つのワークシート内で名前の付いていないセル範囲 | sheetname$range
たとえば、1996 Sales というワークシートのセル A1 から D12 へアクセスするには、source 引数に 1996 Sales$A1:D12 を使用します。 |
たとえば、CreateLinkedExternalTable プロシージャを使用して、Products.xls という Excel ブックの Products というワークシートのデータにリンクされたテーブルを作成し、最初の行をフィールド名とするには、次のようなコードを使用します。
CreateLinkedExternalTable _
"C:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
"Excel 8.0;DATABASE=C:\Products.xls;HDR=YES", "Products$","LinkedXLS"
HTML の表をリンクさせる
Hypertext Markup Language (HTML) は、イントラネットまたはインターネット上での情報公開において、一般的に使用されているものです。HTML ファイルは、ファイル内の情報の表示方法を指定するタグを含むテキスト ファイルです。HTML のテーブル タグ (<TD> および </TD>) を使用して複数の HTML ファイル内の表を挿入することができます。Microsoft Jet HTML I-ISAM ドライバにより、HTML ファイル内の表データ形式の情報、または HTML ファイルにあるリスト データ形式のデータにアクセスできます。
Microsoft Jet HTML I-ISAM ドライバは、HTML の表にあるデータを読み取り、各セルのデータを解釈して、表の列にあるデータに対応するデータ型を選択します。たとえば、列の任意のデータがテキストの場合、列のデータ型は 255 文字のフィールド サイズのテキストと解釈されます。列にあるデータが数値の場合、多くの値が整数か浮動小数点かによって、その列のデータ型は長整数型または倍精度浮動小数点型と解釈されます。列のデータが数値とテキストを組み合わせたものの場合は、テキストと解釈されます。
各列のデータ型に関する情報を含む Schema.ini ファイルを作成することにより、Microsoft Jet HTML I-ISAM ドライバで列のデータを強制的に特定のデータ型として解釈させることができます。Schema.ini ファイルの詳細については、Microsoft Access ヘルプを参照してください。
HTML の表を開く接続テキストの書式は次のようになります。
"HTML Import;DATABASE={drive**:\** | FTP:// | HTTP://}path**\filename [;HDR={Yes | No}]"**
drive には、ローカル コンピュータのディスク ドライブ名を入力し、path および filename によりデータ ソース ファイルが指定され、HDR は最初の行が、データではなくヘッダーとして使用するかどうかを表わします。パス ノードの区切り記号には、\ マークまたはスラッシュ (/) を使用します。
CreateLinkedIISAMTable プロシージャの strSourceTbl 引数により、リンクさせるソース テーブルを指定します。HTML の表の場合、その表は、リンクさせるデータを含む HTML ファイル内の <CAPTION> タグ (存在する場合) で囲まれた名前により識別されます。表にキャプションがなく、ファイル内にある表が 1 つのみの場合、HTML ファイルのタイトルを使用して表を参照してください。複数の表があり、どの表にもキャプションがない場合、Table1、Table2、といったように、順に参照します。I-ISAM ドライバでは、これらの参照を HTML ファイルで最初に名前のない表、2 番目に名前のない表、として順に解釈されます。
たとえば、CreateLinkedExternalTable プロシージャを使用して、Sales_1.html の Sales という表にリンクされたテーブルを作成し、最初の行をフィールド名として使用する場合、次のようなコードを使用します。
CreateLinkedExternalTable _
"C:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
"HTML Import;DATABASE=C:\Sales_1.html;HDR=YES","Sales","LinkedHTML"
Outlook/Exchange フォルダをリンクさせる
Microsoft Exchange の I-ISAM ドライバを使用することにより、リモートの Microsoft Exchange サーバーに保存された Microsoft Exchange および Outlook のデータ、またはローカルのオフライン フォルダ (.ost)、個人用フォルダ (.pst)、個人用アドレス帳 (.pab) ファイルに保存されたデータへアクセスできます。
Microsoft Exchange I-ISAM ドライバを使用した Microsoft Exchange および Outlook のデータへのアクセスは、主にメッセージ フォルダ、パブリック フォルダ、アドレス帳、およびその他のアイテムからの情報を取得する際に便利ですが、既存のアイテムを修正することはできません。Microsoft Exchange および Outlook のメッセージ ストアに新規アイテムを書き込むことは可能ですが、すべてのフィールドを使用または更新できる訳ではなく、作成できないアイテムもあります。
次の表では、Microsoft Exchange または Outlook の外部データ ソースへの接続のための接続テキストにある identifier、source、および options の部分を作成する際に必要な項目、およびオプションとなる項目を説明します。
項目 | 説明 |
識別子 | Exchange 4.0 (必須)。この設定は、Microsoft Exchange 4.x、5.0、および Outlook のデータを使用します。 |
ソース テーブルのパス | MAPILEVEL=storage|folderpath (必須)。storage エントリは、Outlook のフォルダ一覧に表示されるサーバー、個人用フォルダ、パブリック フォルダのメールボックスの名前と完全に一致させます。folderpath は、接続するフォルダの 1 つ上のフォルダへのパスです。storage エントリと縦線 (|) は必須です。folders エントリは、storage 内にある最上位のフォルダの下にあるフォルダへのアクセスに必要です。ネストされたフォルダを一覧表示している場合は、各フォルダ名をバックスラッシュ (\) で区切ってください (例、"Mailbox – Pat Smith|Inbox\Big Project")。 |
ソース テーブル タイプ | TABLETYPE=0 (フォルダの場合) (既定) TABLETYPE=1 (アドレス帳の場合) (必須) |
データベース名 | DATABASE=path (必須)。path エントリは、ドライバ (通常、現在のデータベース) で使用するシステム テーブルを保存する Microsoft Access データベース (.mdb) への完全なパスおよびファイル名です。 |
プロファイル名 | PROFILE=profile (オプション、指定されていない場合は既定のプロファイルを使用)。profile エントリは、使用する Microsoft Exchange または Outlook のプロファイル名です。 |
パスワード | PWD=password (オプション、ネットワークのログオン パスワードが Microsoft Exchange サーバーへ渡される場合は不要)。password エントリは、Microsoft Exchange または Outlook のログオン パスワードです。 |
上記の項目を配列して、Microsoft Exchange または Outlookデータ ソースを開く接続テキストは以下のような書式になります。
"Exchange 4.0;MAPILEVEL= storage**|folderpath;TABLETYPE={0|1}; DATABASE=path;[PROFILE=profile;PWD=password;]"**
CreateLinkedIISAMTable プロシージャの strSourceTbl 引数により、リンクさせるソース テーブルを指定します。Microsoft Exchange または Outlook のアイテムの場合は、Outlook のフォルダ一覧に表示される接続先のフォルダ名となります。
たとえば、CreateLinkedExternalTable プロシージャを使用して、受信トレイのサブフォルダである Big Project というフォルダにリンクされたテーブルをまず作成し、そのリンクされたテーブルに "LinkedExchange" という名前を付ける場合、次のようなコードを使用します。
CreateLinkedExternalTable _
"C:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
"Exchange 4.0;MAPILEVEL=Mailbox - Pat Smith|Inbox;TABLETYPE=0;" & _
"DATABASE=C:\Program Files\Microsoft Office\Office\Samples\ _
Nwind.mdb;" _
,"Big Project","LinkedExchange"
ODBC テーブルをリンクさせる
ODBC テーブルを開く接続テキストの書式は次のようになります。
"ODBC;connectstring"
connectstring は、ODBC データ ソースへの接続に必要な接続テキストです。たとえば、SQL Server の Pubs サンプル データベースへ接続する ODBC の接続テキストは、次のようになります。
"DSN=Publishers;;UID=sa;PWD=;DATABASE=pubs"
そのほかの ODBCデータ ソースへの接続には異なる書式を使用します。ODBC の接続テキストを作成する簡単な方法は、Access でSQL パルスルー クエリを作成することです。SQL パススルー クエリの [Query Properties] ダイアログ ボックスにある ODBCConnectStr プロパティの [Build] をクリックすると、ウィザードが開始されるので、指示に従って ODBC の接続テキストを作成します。SQL パススルー クエリ作成の詳細については、Microsoft Access ヘルプ を参照してください。
CreateLinkedExternalTable プロシージャ の strSourceTbl 引数により、リンク先のソース テーブルを指定します。ODBC テーブルの場合、リンク先の ODBC サーバー上のデータベースにあるテーブル名となります。
たとえば、CreateLinkedExternalTable プロシージャを使用して、SQL サーバー上の Pubs サンプル データベースにある dbo.Authors というテーブルにリンクされたテーブルを作成し、"LinkedODBC" と名前を付けるには、次のようなコードを使用します。
CreateLinkedExternalTable _
"C:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
"ODBC;DSN=Publishers;UID=sa;PWD=;DATABASE=pubs;", _
"dbo.Authors","LinkedODBC"
リンクされた ODBC テーブルの接続テキストからのユーザー ID およびパスワードは、既定では保存されず、テーブルを開くたびにこれらの情報を入力するようメッセージが表示されます。ユーザー ID とパスワードを接続テキストの一部として保存する場合は、プロバイダ別の Jet OLEDB:Cache Link Name/Password プロパティを True に設定してください。これは、DAO において dbAttachSavePWD 定数をテーブルの Attributes プロパティに追加する場合と同様です。
リンクされたテーブルの作成に使用可能なすべてのプロバイダ別プロパティのリストについては、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダに含まれる ADOProperties.doc を参照してください。
リンクされたテーブルのリンクを更新する
リンクされたテーブルのデータ ソースの名前を変更またはそのデータ ソースを移動した場合、リンクの確立に使用されている接続情報を更新します。リンクを更新するには、プロバイダ別の Jet OLEDB:Link Datasource プロパティを使用してテーブルの接続テキストを更新し、プロバイダ別の Jet OLEDB:Create Link プロパティを True に設定してリンクを再確立します。次のコード例では、別の Access データベースへリンクされたテーブルのリンクを更新します。
Sub RefreshLinks(strDBLinkFrom As String, _
strDBLinkSource As String)
Dim catDB As ADOX.Catalog
Dim tblLink As ADOX.Table
Set catDB = New ADOX.Catalog
' リンクを更新するデータベースのカタログを開きます。
catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strDBLinkFrom
For Each tblLink In catDB.Tables
' テーブルがリンクされたものであることを確認します。
If tblLink.Type = "LINK" Then
tblLink.Properties("Jet OLEDB:Link Datasource") = strDBLinkSource
tblLink.Properties("Jet OLEDB:Create Link") = True
End If
Next
catDB = Nothing
End Sub
RefreshLinks プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに含まれる DataAccess.mdb サンプル ファイルの CreateDatabase モジュールにあります。