■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#33707-0mdb ファイルの中にあるテーブル名の取得匿名337072000-11-19(日) 13:06
     #33709-0RE#33707:mdb ファイルの中にあるテーブル名の取得モリブデンX2000-11-19(日) 13:47
     #33747-0mdb ファイルの中にあるテーブル名の取得(続き)匿名337472000-11-20(月) 14:06
     #33751-0RE#33747:mdb ファイルの中にあるテーブル名の取得(続き)魔界の仮面弁士2000-11-20(月) 14:25
     #33777-0RE#33751:mdb ファイルの中にあるテーブル名の取得(続きの続き)モリブデンX2000-11-20(月) 20:40
#33707-0
mdb ファイルの中にあるテーブル名の取得
例えば、『ある mdb ファイルの中に
sample というテーブルが存在しなかった場合には、
sample というテーブルを作成する』
という操作をしたいのですが。

現在は、 sample というテーブルがあるものとして処理を行い、
OpenRecordset("select ..... from sample")
の所で、エラーが発生したら、テーブルがなかったのだなぁ、
と分かるので、そこで改めて
sample というテーブルを作成するようにしています。

しかし、この方法だと不可能な点があるので、
エラートラップを使わずに、前もって存在するテーブルを知りたいのです。
どうか、ご教授願います。
#33709-0
RE#33707:mdb ファイルの中にあるテーブル名の取得
> 例えば、『ある mdb ファイルの中に
> sample というテーブルが存在しなかった場合には、
> sample というテーブルを作成する』
> という操作をしたいのですが。
> 
> 現在は、 sample というテーブルがあるものとして処理を行い、
> OpenRecordset("select ..... from sample")
> の所で、エラーが発生したら、テーブルがなかったのだなぁ、
> と分かるので、そこで改めて
> sample というテーブルを作成するようにしています。
> 
> しかし、この方法だと不可能な点があるので、
> エラートラップを使わずに、前もって存在するテーブルを知りたいのです。
> どうか、ご教授願います。

 ADOXというものを使うと簡単です。
 「Microsoft ADO Ext.2.1 for DDL and Security」に参照設定を行います。

 Dim xCatalog As ADOX.Catalog
 Dim xTable As ADOX.Table

 Set xCatalog = New ADOX.Catalog
 Set xCatalog.ActiveConnection = cn ' 別に作成したADODB.Connection

 For Each xTable In xCatalog.Tables
     If xTable.Type = "TABLE" Then
         Debug.Print xTable.Name
     End If
 Next

 これでテーブル名の一覧が、イミディエイトペインに出力されます。
 OpenSchemaでもできたと思いますが、こちらの方が簡単だと思います。
#33747-0
mdb ファイルの中にあるテーブル名の取得(続き)
>  ADOXというものを使うと簡単です。
>  「Microsoft ADO Ext.2.1 for DDL and Security」に参照設定を行います。
> 
>  Dim xCatalog As ADOX.Catalog
>  Dim xTable As ADOX.Table
> 
>  Set xCatalog = New ADOX.Catalog
>  Set xCatalog.ActiveConnection = cn ' 別に作成したADODB.Connection
> 
>  For Each xTable In xCatalog.Tables
>      If xTable.Type = "TABLE" Then
>          Debug.Print xTable.Name
>      End If
>  Next
> 
>  これでテーブル名の一覧が、イミディエイトペインに出力されます。
>  OpenSchemaでもできたと思いますが、こちらの方が簡単だと思います。

回答ありがとうございました。でも...

ADODB の使い方が分かりません。
『Microsoft ActiveX Data Objects 2.0 Library』を参照設定しないと使えないですよね?

ヘルプを開こうとしても、ファイルがありませんというメッセージが出てしまいます。
#33751-0
RE#33747:mdb ファイルの中にあるテーブル名の取得(続き)
> ADODB の使い方が分かりません。
> 『Microsoft ActiveX Data Objects 2.0 Library』を参照設定しないと使えないですよね?
ではなくて、
>>  「Microsoft ADO Ext.2.1 for DDL and Security」に参照設定を行います。
ですよ。

多分、以下のコメントを見て、
>>  Set xCatalog.ActiveConnection = cn ' 別に作成したADODB.Connection
誤解されたのでしょうけれど、ADODBを参照設定しなくても、ADOXは使えます。

その場合、Connectionオブジェクトを渡す代わりに、単純に接続文字列だけを渡すようにすればOKです。
    xCatalog.ActiveConnection = 接続文字列

開発環境が、Access2000であるならば、最初からADODBが組み込まれているはずなので、
    Set xCatalog.ActiveConnection = CurrentProject.Connection
というのもアリです。


でもって、レイトバインドなら、参照設定すらいらなくて、
>>  Dim xCatalog As ADOX.Catalog
>>  Dim xTable As ADOX.Table
これはそれぞれ、As Objectに変更し、

>>  Set xCatalog = New ADOX.Catalog
ここを、Set xCatalog = CreateObject("ADOX.Catalog") にすれば、そのまま動きます。


……それと、使っているのがMDBが、Access97形式なのであれば、
ADOXなんて使わずに、DAOのTableDefオブジェクトを使うのが無難です。


> ヘルプを開こうとしても、ファイルがありませんというメッセージが出てしまいます。
ヘルプをインストールしていないのでしょう、きっと。(^^;
バージョンにもよりますが、「ADO260.CHM」だとか、「ADO210.CHM」などというファイルのハズです。
#33777-0
RE#33751:mdb ファイルの中にあるテーブル名の取得(続きの続き)
> その場合、Connectionオブジェクトを渡す代わりに、単純に接続文字列だけを渡すようにすればOKです。
>     xCatalog.ActiveConnection = 接続文字列
> 
> 開発環境が、Access2000であるならば、最初からADODBが組み込まれているはずなので、
>     Set xCatalog.ActiveConnection = CurrentProject.Connection
> というのもアリです。

 そんな簡単な技があったとは知りませんでした。精進します。ありがとうございます。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)