Microsoft Access のテーブルを使用した作業

David Shank
Microsoft Corporation

October 5, 2000

この記事は、MSDN Online Voices のコラム "Office Talk" からの再録です。

Microsoft Access のテーブルを使用した作業について議論しようとする場合、何について議論しないか、ということをいつも説明しておく必要があります。この記事では、テーブルに含まれるデータを使用した作業については説明しません。正確に言えば、テーブル自体を使用して作業することを説明します。 つまり、テーブルの作成、変更、および外部テーブルとのリンクについて説明します。(Access データベース内のデータを使用した作業の詳細については、 以前の 1 月 および 2 月 のコラムを参照してください)。

以前のバージョンの Microsoft Access では、開発者はプログラムからテーブルを使用する場合、Microsoft Data Access Objects (DAO) オブジェクト ライブラリを使用していました。新しい Access データベースでは、既定で DAO オブジェクト ライブラリが参照されました。Microsoft Access 2000 では、テーブル構造の作成とそのテーブル構造を使用した作業、または外部テーブルとのリンクには、ActiveX Data Objects Extensions for DDL and Security (ADOX) オブジェクト モデルが使用されます。ADOX オブジェクトには、データベース、テーブル、およびクエリの構造の作成、変更、表示を行うためのオブジェクト、プロパティ、およびメソッドが含まれています。新しい Access データベースでは、既定で ADOX オブジェクト モデルが参照されることはありません。Visual Basic for Applications (VBA) を使用して作業する前にADOX オブジェクト ライブラリへの参照を設定する必要があります。(DAO と AFO/ADOX の比較例については、「DAO コードの ADO と Microsoft Jet Provider の組み合わせへの移植」 を参照してください。)

Access データベース内のテーブルの一覧

ADOX では、Table オブジェクトが 1 つのテーブルを表し、Tables コレクションがデータベース内のすべてのテーブルに関する情報へのアクセスを提供します。あるデータベース内のすべてのテーブルを一覧するために Tables コレクションを使用できます。ただし、Tables コレクションには、Access データベース内の実際のテーブルではない Table オブジェクトを含む場合もあります。

たとえば、レコードを返すが、パラメータを持たないクエリ (Access では "選択クエリ" と呼ばれています) は、ADOX では View オブジェクトであると考えられ、Tables コレクションにも含まれます。ADOX Tables コレクションは、リンク テーブルやシステム テーブルも含んでいます。Type プロパティを使用して、異なる種類の Table オブジェクトを識別できます。 以下の表は、Microsoft Jet 4.0 OLE DB Provider と共に ADO を使用するときに、Type プロパティに返される可能性のある文字列値を一覧します。

Type 説明
Access Table Microsoft Access システム テーブル
Link ODBC 以外のデータ ソースからのリンク テーブル
Pass-Through ODBC データ ソースからのリンク テーブル
System Table Microsoft Jet システム テーブル
Table 標準のテーブル
View パラメータを持たず、レコードを返すクエリ

以下の例では、ListAccessTables プロシージャは、 strDBPath 引数で指定されるデータベースに含まれるすべてのテーブル名を VBA のイミディエイト ウィンドウに出力します。


Sub ListAccessTables(strDBPath As String)
   Dim catDB As ADOX.Catalog
   Dim tblList As ADOX.Table

   Set catDB = New ADOX.Catalog
   ' カタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Data Source=" & strDBPath

   ' すべてのテーブルをループしますが、クエリは行いません。
   ' テーブル名と種類を出力します。
   For Each tblList In catDB.Tables
      If tblList.Type <> "VIEW" Then 
         Debug.Print tblList.Name & vbTab & tblList.Type
      End If
   Next

   Set catDB = Nothing
End Sub

また、ADO OpenSchema メソッドを使用して、データベース内のテーブルに関する情報を含む Recordset オブジェクトを返すこともできます。このメソッドを使用すると、Type プロパティや Name プロパティに基づいて、返されるテーブルの一覧を制限できます。一般的には、ADOX はコレクション内の各要素に対してオブジェクトを作成するというオーバーヘッドを生じるので、ADOX Tables コレクション全体をループするよりは、OpenSchema メソッドを使用するほうが高速になります。以下のプロシージャは、上記の例と同じ情報を OpenSchema メソッドを使用して表示する方法を示しています。


Sub ListAccessTables2(strDBPath)
   Dim cnnDB As ADODB.Connection
   Dim rstList As ADODB.Recordset

   Set cnnDB = New ADODB.Connection

   ' 接続を開きます。
   With cnnDB
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Open strDBPath
   End With

   ' テーブル スキーマ行セットを開きます。
   Set rstList = cnnDB.OpenSchema(adSchemaTables)

   ' 結果をループして、イミディエイト ウィンドウ
   ' に名前と種類を出力します。
   With rstList
      Do While Not .EOF
         If .Fields("TABLE_TYPE") <> "VIEW" Then
            Debug.Print .Fields("TABLE_NAME") & vbTab _
               & .Fields("TABLE_TYPE")
         End If
        .MoveNext
      Loop
   End With
   cnnDB.Close
   Set cnnDB = Nothing
End Sub

Access テーブルの作成と変更

ADOX オブジェクト、メソッド、およびプロパティを使用して、Access データベースの構造を表示、作成、および変更できます。以下のセクションでは、これを行う方法を詳しく説明します。トランザクションを使用して、データベース構造に対して行う一連の変更を "ラップ" できます。変更を囲むラッパーとしてトランザクションを使用することにより、すべての変更を 1 つの単位として実行できます。

テーブルの作成

テーブルを作成するには、まず Catalog オブジェクトを作成し、その後、新しく Table オブジェクトを作成します。Table オブジェクトの Columns コレクションの Append メソッドを使用して、フィールド定義 (Column オブジェクト) を Columns コレクションに追加します。最後に、Table オブジェクトを Catalog オブジェクトの Tables コレクションに追加します。Columns コレクションに Column オブジェクトを追加する前に、Create メソッドを使用して Column オブジェクトを作成する必要はありません。Append メソッドを使用して、Column オブジェクトの作成と追加を両方とも行うことができます。以下の例では、これらのオブジェクトを使用して、 strDBPath 引数で指定されるデータベースに Contacts テーブルを作成しています。


Sub CreateTable(strDBPath As String)
   Dim catDB As ADOX.Catalog
   Dim tblNew As ADOX.Table

   Set catDB = New ADOX.Catalog
   ' カタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Data Source=" & strDBPath

   Set tblNew = New ADOX.Table
   ' 新規 Table オブジェクトを作成します。
   With tblNew
      .Name = "Contacts"
      ' フィールドを作成し、新規 Table オブジェクトの 
      ' Columns コレクションに作成したフィールドを追加します。
      With .Columns
         .Append "FirstName", adVarWChar
         .Append "LastName", adVarWChar
         .Append "Phone", adVarWChar
         .Append "Notes", adLongVarWChar
      End With
   End With

   ' 新規 Table オブジェクトをデータベースの Tables コレクションに追加します。
   catDB.Tables.Append tblNew

   Set catDB = Nothing
End Sub

注意 : ADOX フィールドのデータ型名は、DAO で使用していた型名とは異なります。フィールド データ型の詳細については、ADOX オブジェクト モデルのマニュアルを参照してください。

フィールド属性とプロパティの設定

フィールドのデータ型の指定に加えて、フィールドがオートナンバー型かどうか (Access ユーザー インターフェイスのオートナンバー データ型)、フィールドにアクティブなハイパーリンクが格納されるかどうか (Access ユーザー インターフェイスのハイパーリンク データ型) などの、その他のフィールド属性を指定する場合もあります。DAO を使用してオートナンバー型フィールドやハイパーリンク フィールドを作成するときは、フィールドの Attributes プロパティに対応する定数を追加します。ADOX で同等のフィールドを作成するには、フィールドの作成に使用した Column オブジェクトの Properties コレクション内の対応するプロパティを設定します。

以下の例では、ADOX でフィールドの AutoIncrement プロパティを True に設定することにより、オートナンバー型フィールドを作成する方法を示します。


Sub CreateAutoNumberField(strDBPath As String)
   Dim catDB As ADOX.Catalog
   Dim tbl As ADOX.Table

   Set catDB = New ADOX.Catalog
   ' カタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Data Source=" & strDBPath

   Set tbl = New ADOX.Table
   With tbl
      .Name = "Contacts"
      Set .ParentCatalog = catDB
      ' フィールドを作成し、新規 Table オブジェクトの 
      ' Columns コレクションに作成したフィールドを追加します。
      With .Columns
         .Append "ContactId", adInteger
         ' ContactId フィールドをオートナンバー型にします。
         .Item("ContactId").Properties("AutoIncrement") = True
         .Append "CustomerID", adVarWChar
         .Append "FirstName", adVarWChar
         .Append "LastName", adVarWChar
         .Append "Phone", adVarWChar, 20
         .Append "Notes", adLongVarWChar
      End With
   End With

   ' 新規 Table オブジェクトをデータベースの Tables コレクションに追加します。
   catDB.Tables.Append tbl

   Set catDB = Nothing
End Sub

リンク テーブルの作成

外部データベースからのテーブルをリンクすることにより、データベースの本来のテーブルを操作するのと同じ方法で、データの読み取り、データの更新と追加 (大部分の場合)、およびリンクしたテーブルを使用するクエリの作成を行うことができます。 Microsoft Jet データベース エンジンでは、Access データベース内のテーブルへのリンクを作成できるだけでなく、Microsoft Jet がインストール可能な ISAM ドライバ (Excel、dBase、Paradox、Exchange/Outlook、Lotus WKSText、および HTML) や ODBC ドライバがサポートするその他のデータ形式のテーブルとのリンクを作成できます。

ADO と ADOX は、本来の Access データベースからリンクされたテーブルやインストール可能な ISAM からリンクされたテーブルと ODBC ドライバを使用してリンクされたテーブルを識別します。ADO OpenSchema メソッドを使用し、データベースのテーブルを説明する Recordset オブジェクトを返すために adSchemaTablesQueryType 引数に指定すると、リンクされた Access テーブルやリンクされたインストール可能な ISAM テーブルに対しては、TABLE_TYPE フィールドに "LINK" を返します。それに対して、ODBC ドライバを使用してリンクされたテーブルには "PASS-THROUGH" を返します。このことは、ADOX Table オブジェクトの Type プロパティでも同様になります。さらに、読み取り専用の dbAttachedTable 定数および adAttachedODBC 定数を持つ DAO Attributes プロパティを使用しても同じ結果が得られます。

リンクされた Access テーブルの作成

ADOX および Microsoft Jet 4.0 OLE DB Provider を使用して、リンクされた 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
   ' リンクを作成するデータベースのカタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Data Source=" & strDBLinkFrom

   Set tblLink = New ADOX.Table
   With tblLink
      ' 新しいテーブルに名前を付け、開いている Catalog が
      ' Properties コレクションにアクセスできるように、 
      ' ParentCatalog プロパティを設定します。
      .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

リンク テーブルのテーブル構造を定義する必要がないことに注意してください。Microsoft Jet データベース エンジンは、外部データ ソースのテーブルの定義を基づいて適切なフィールドを自動的に作成します。

リンクされた外部テーブルの作成

ADO と ADOX は、Jet I-ISAM ドライバを使用してリンクされたテーブルと、ODBC データ ソースからリンクされたテーブルを区別しますが、リンクされた外部テーブルの作成に使用するメソッドは同じです。ADOX と Microsoft Jet 4.0 OLE DB Provider を使用してリンクされた外部テーブルを作成するには、外部テーブルに接続する方法を示す Microsoft Jet 接続文字列を指定するために、プロバイダ固有の Jet OLEDB:Link Provider String プロパティを使用する必要があります。

I-ISAM テーブルでは、接続文字列は I-ISAM 型と外部データ ソースへのパスを指定します。ODBC テーブルでは、接続文字列はデータ ソースへの接続に必要な ODBC 接続文字列を指定します。その後、プロバイダ固有の Jet OLEDB:Remote Table Name プロパティを使用して、ソース テーブルの名前を指定します。この名前はリンクされるデータの種類によって変化します。たとえば、Microsoft 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
   ' リンクを作成するデータベースのカタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Data Source=" & strTargetDB

   Set tblLink = New ADOX.Table
   With tblLink
   ' 新しいテーブルに名前を付け、開いている Catalog が
   ' Properties コレクションにアクセスできるように、 
   ' ParentCatalog プロパティを設定します。
      .Name = strLinkTblName
      Set .ParentCatalog = catDB

      ' リンクを作成するためにプロパティを設定します。
      .Properties("Jet OLEDB:Create Link") = True
      .Properties("Jet OLEDB:Link Provider String") _
         = strProviderString
      .Properties("Jet OLEDB:Remote Table Name") = strSourceTbl
   End With

   ' テーブルを Tables コレクションに追加します。
   catDB.Tables.Append tblLink

   Set catDB = Nothing
End Sub

このプロシージャを使用するには、外部データ ソースへの接続を確立するために、 strProviderString 引数の Jet 接続文字列を正しく書式化する必要があります。リンクする Exchange フォルダや Excel 範囲など、ソース テーブルを識別するために、 strSourceTbl 引数に正しい文字列を指定する必要があります。以下のセクションでは、Jet 接続文字列を作成する方法および Excel、HTML、Microsoft Exchange または Outlook、および ODBC データ ソースに対してソース テーブルを指定する方法を説明します。

Jet I-ISAM 接続文字列の基本構文

すべての Jet I-ISAM ドライバは、データ ソースを開くために、同じ基本構文を使用する接続文字列を受け入れます。

" identifier ; source ; options "

identifier 引数は、開くファイルの種類を指定するキーワードです。これは、外部データ ソースを開くときに Connection オブジェクトの Extended Properties で使用するのと同じ文字列です。たとえば、Excel 8.0 は Excel 97 または Excel 2000 ワークブックを開くときに使用します。

source 引数は、開くファイルのドライブ記号または転送プロトコル (http:// または ftp:// のいずれか)、フルパス名、およびファイル名を含みます。 source 引数は DATABASE= で始まります。

options 引数を使用して、I-ISAM ドライバに対して付加的な、オプションの引数を指定します。この引数は、パスワードや、スプレッドシートの先頭行が列ヘッダー情報を含むかどうかを示すためなどに使用されます。セミコロンは複数の引数を区切るために使用します。

Excel ワークブックへのリンク

Excel ワークシートを開くための接続文字列は、以下の形式を持ちます。

" identifier ;DATABASE={drive :\ | FTP:// | HTTP://}path \ filename .xls [;HDR={Yes | No}]"

identifier は開こうとする Excel のバージョンに対応するデータ ソース識別子です。drivepath、および filename は、特定のデータ ソース ファイルを指します。HDR は先頭行にヘッダーを含むかどうかを示します (Yes を設定する場合は、先頭行をフィールド名として使用し、No を設定する場合は、先頭行をデータとして使用します)。

CreateLinkedExternalTable プロシージャの strSourceTbl 引数は、リンクするデータを指定し、その値を Jet OLEDB:Remote Table Name プロパティに渡します。Microsoft Excel 5.0、7.0 (95)、8.0 (97)、または 9.0 (2000) ワークブックにリンクするときは、使用できるデータのサブセットを指定できます。 単一のワークシート、ワークブック内の任意の位置の名前付き、範囲または単一のワークシートの名前付きでない範囲にリンクできます。以下の表は、データの希望するサブセットを指定するために使用する構文を一覧しています。

オブジェクト 構文
ワークシート sheetname$
名前付き範囲 rangename
名前付きではない範囲 sheetname$rangeaddress

たとえば、CreateLinkedExternalTable プロシージャを使用して、Products.xls という名前のワークブック内の "Products" という名前のワークシートにリンクされるテーブルを作成するには、以下のように記述します。ここで、ワークシートの先頭行をフィールド名として扱います。


CreateLinkedExternalTable _
   "C:\Program Files\Microsoft " _
      & "Office\Office\Samples\Northwind.mdb", _
      "Excel 8.0;DATABASE=C:\Products.xls;HDR=YES", _
      "Products$","LinkedXLS"

HTML テーブルへのリンク

HTML ファイルは、ファイル内の情報を表示する方法を指定するタグを含むテキスト ファイルです。HTML TABLE タグ (<TABLE></TABLE>) を使用して、HTML ファイルに 1 つ以上のテーブルを埋め込むことができます。Microsoft Jet HTML I-ISAM ドライバは、表形式またはリスト データとして書式化された HTML ファイル内のデータにアクセスできます。

Microsoft Jet HTML I-ISAM ドライバは、HTML テーブル内のデータを読み取り、テーブル セルに含まれるデータを解釈することにより、テーブル列内のデータのデータ型を選択します。データの列ごとのデータ型に関する情報を含む Schema.ini ファイルを作成することにより、Microsoft Jet HTML I-ISAM ドライバが列データを特定のデータ型として解釈するように設定できます。Schema.ini ファイルの詳細については、Microsoft Access のヘルプを参照してください。

HTML テーブルを開く接続文字列は、以下の形式を持ちます。

"HTML Import;DATABASE={drive :\ | FTP:// | HTTP://}path \ filename [;HDR={Yes | No}]"

drive はローカル コンピュータ上のディスク ドライブの記号です。pathfilename はデータ ソース ファイルを指します。HDR は先頭行がデータの代わりにヘッダーを持つかどうかを示します。パス ノードは、円記号 (\) またはスラッシュ (/) のいずれかで区切ることができます。

strSourceTbl 引数はリンクするソース テーブルを指定します。HTML テーブルでは、リンクするデータを含む HTML ファイル内の<CAPTION> タグ (存在する場合は) で囲まれた名前でテーブルが識別されます。 テーブルにキャプションがなく、ファイル内にテーブルが 1 つしかない場合は、HTML ファイルのタイトルを使用してテーブルを参照します。複数テーブルが存在し、どのテーブルにもキャプションがない場合、Table1、Table2、というぐあいに順番に参照します。I-ISAM ドライバは、これらの参照を、HTML ファイル内で最初の名前のないテーブル、2 番目に名前のないテーブルというぐあいに順番に解釈します。

たとえば、CreateLinkedExternalTable プロシージャを使用して、Sales_1.htm 内の "Sales" という名前のテーブルにリンクされるテーブルを作成するには、以下のように記述します。ここでは、テーブル内の先頭行をフィールド名として扱います。


CreateLinkedExternalTable _
   "C:\Program Files\Microsoft "
      & "Office\Office\Samples\Northwind.mdb", _
      "HTML Import;DATABASE=C:\Sales_1.htm;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 データ ソースを開く接続文字列は、以下の形式を持ちます。

"Exchange 4.0;MAPILEVEL= storage | folderpath ; TABLETYPE={0|1};
DATABASE= path ;[PROFILE= profile ;PWD= password ;]"

strSourceTbl 引数は、リンクするソース テーブルを指定します。Microsoft Exchange または Outlook 項目では、これは 接続するフォルダの名前で、Outlook のフォルダ一覧に表示される名前です。

たとえば、CreateLinkedExternalTable プロシージャを使用して、受信トレイ フォルダのサブフォルダである "Big Project" という名前のフォルダにリンクされるテーブルを作成する場合は、以下のように記述します。リンクを作成後、リンク テーブルに "LinkedExchange" という名前を付けています。


CreateLinkedExternalTable _
   "C:\Program Files\Microsoft "
      & "Office\Office\Samples\Northwind.mdb", _
      "Exchange 4.0;MAPILEVEL=Mailbox - Pat " _
      & "Smith|Inbox;TABLETYPE=0;" _ 
      & "DATABASE=C:\Program Files\Microsoft " _
      & "Office\Office\Samples\Northwind.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 パススルー クエリの [クエリ プロパティ] ダイアログ ボックスで、[ODBC 接続文字列] プロパティで [...] ボタンをクリックして、ODBC 接続文字列の作成を行うウィザードを開始します。SQL パススルー クエリの作成の詳細については、Microsoft Access のヘルプを参照してください。

CreateLinkedExternalTable プロシージャの strSourceTbl 引数は、リンクするソース テーブルを指定します。ODBC テーブルでは、これはリンクする ODBC サーバー上のデータベース内のテーブル名になります。

たとえば、CreateLinkedExternalTable プロシージャを使用して、SQL Server の Pubs サンプル データベース内の "dbo.Authors" という名前のテーブルにリンクするテーブルを作成するには以下のように記述します。ここでは、リンク テーブルの名前を "LinkedODBC" にしています。


CreateLinkedExternalTable _
   "C:\Program Files\Microsoft " _
      & "Office\Office\Samples\Northwind.mdb", _
      "ODBC;DSN=Publishers;UID=sa;PWD=;DATABASE=pubs;", _
      "dbo.Authors","LinkedODBC"

リンクする ODBC テーブルの接続文字列のユーザー ID とパスワードは、既定では保存されません。つまり、テーブルを (コードから) 開くたびに、この情報がユーザーに問い合わせられます。ユーザー ID とパスワードを接続文字列の一部として保存する場合は、プロバイダ固有のプロパティ Jet OLEDB:Cache Link Name/PasswordTrue に設定します。

リンク テーブルの最新状態を表示

リンク テーブルのデータ ソースの名前が変更されるか移動される場合、リンクを確立するために使用した接続情報を最新状態に更新する必要があります。リンクを最新状態に更新するには、プロバイダ固有の 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

詳細情報の入手場所

ここで説明した技法や技術は、ADOX を使用して Access データベースで作業することに関するたくさんの考え方を提供しています。さらに詳しい情報については、以下のリソースを確認してください。

David Shank は、Office チームのプログラマ/ライターであり、主に開発者向け文書を専門としています。うわさによると、彼は Redmond 東の山頂に住んでおり、今でも北西部に住んでいる数少ない北西部出身者の 1 人であるとのことです。