-PR-
解決
済み

ACCESSのテーブル名をリストにしたい

  • 暇なときにでも
  • 質問No.98371
  • 閲覧数730
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 85% (66/77)

ACCESSのデータをADOで操作したいのですけれども,
ACCESSのテーブル名をリストにする方法がわかりません。
教えてください。お願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

どもども 田吾作8です。←1増えた

前回うそをいいました。
カタログのTable内には、クエリーも含みます。
以下のコードを一度実行してください。

'【機能】:テーブル・クエリーをイミディエイトウィンドウへ出力
'【パラメータ】 DBファイルのフルパス
Sub DebugTables(inDbFileName As String)
Dim strConnect As String
Dim wkCnn As ADODB.Connection
Dim wkCat As ADOX.Catalog
Dim wkTbl As Table

'接続の文字列
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & inDbFileName & ";"

'DBに接続
Set wkCnn = New ADODB.Connection
wkCnn.Open strConnect

'カタログにセット
Set wkCat = New ADOX.Catalog
wkCat.ActiveConnection = wkCnn

'テーブル・クエリーをイミディエイトウィンドウへ出力
For Each wkTbl In wkCat.Tables
Debug.Print wkTbl.Type & " : " & wkTbl.Name
Next wkTbl

PGMEND:
'それぞれ開放
Set wkTbl = Nothing
Set wkCat = Nothing
wkCnn.Close
Set wkCnn = Nothing
End Sub

出力をするとwkTbl.Type には、分類すると4タイプあることがわかると思います。
[View] はクエリーです。
[Table] はテーブルです。
他には [ACCESS TABLE]と[SYSTEM TABLE] が存在します。
これらは、アクセスで開いても普段は出てきませんよね。
しかし、設定すると見えるようになります。
1.DBをアクセスで開く
2.メニューバーの[ツール][オプション]を選択
3.[表示]タブのシステムオブジェクトのチェックをONする
これで見えるようになります。
もしアクセスのアドインを作成したりするようなのであれば、これらを使うかも知れませんが、普通ならば無視しててもいい、システム関係のテーブルです。


知ってると思いますが、あくまで余談で・・・
ADOは大変便利です・・・がっ!、注意点が一つ。
ADOで作成したクエリーはアクセスからは見ることが出来ません。

ADOはあまり使ったことがないようにお見受けしたので、参考までに・・・

でわでわ
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル12

ベストアンサー率 35% (176/494)

(時間が経ってしまっていますが、、、) DatabaseオブジェクトのTableDefsコレクションのnameプロパティを 使うとAccessファイル中のテーブル名が返ってくるのではないでしょうか? [db]をデータベースとして、[db.TableDefs(i).name] をi=0から[db.TableDefs.count-1]まで繰り返して見ていけば リストにする事も可能かと思います ...続きを読む
(時間が経ってしまっていますが、、、)

DatabaseオブジェクトのTableDefsコレクションのnameプロパティを
使うとAccessファイル中のテーブル名が返ってくるのではないでしょうか?

[db]をデータベースとして、[db.TableDefs(i).name]
をi=0から[db.TableDefs.count-1]まで繰り返して見ていけば
リストにする事も可能かと思います。

もしくは、、、
[MSysObjects]テーブルを見れば、他のオブジェクトと一緒に
テーブルも見えるはずです。これはシステムオブジェクトなので
[ツール][オプション]の[システムオブジェクト]にチェックを
入れると表示されるはず。
お礼コメント
nox_neo

お礼率 85% (66/77)

お返事ありがとうございました。
お礼の返事が遅れてすいません。

-boya-さんが言われているとおりしてみたのですが,
db.TableDefs(i).name
は実行されませんでした。

ADOとDAOの違いもわからない私なのですが,
時間を割いてくださりありがとうございました。
投稿日時 - 2001-07-05 21:03:11


  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

ども 田吾作7です。 ADOでの接続ですよね?なんか、先にアドバイスされてる方がDAOでの接続の場合を説明しているみたいなので、ちょっとカキコしますね。 現在「Microsoft ActiveX Data Object 2.x Library」を参照設定してますね? 「Microsoft ADO Ext. 2.x DDL and Security」は参照設定してますか?してなかったら、参照設定に ...続きを読む
ども 田吾作7です。
ADOでの接続ですよね?なんか、先にアドバイスされてる方がDAOでの接続の場合を説明しているみたいなので、ちょっとカキコしますね。

現在「Microsoft ActiveX Data Object 2.x Library」を参照設定してますね?
「Microsoft ADO Ext. 2.x DDL and Security」は参照設定してますか?してなかったら、参照設定に追加してください。

Dim wkCnn As ADODB.Connection
Dim wkCat As ADOX.Catalog

’まずADOでDBに接続する
wkCnn.Open 接続の文字列

’カタログにセット
Set wkCat = New ADOX.Catalog
wkCat.ActiveConnection = wkCnn


wkCatをデバッグしてください。"TABLE"と"VIEW"というのがあります。
それがテーブル一覧、クエリー一覧に該当します。

でわでわ・・・
お礼コメント
nox_neo

お礼率 85% (66/77)

お返事ありがとうございました。
ご指摘の通り「Microsoft ADO Ext. 2.x DDL and Security」は
参照設定していませんでした。
そして参照設定すると,
Dim wkCat As ADOX.Catalog
が入力できるようになりました。
が, まだわかりません。
Dim strRecSource as string

strRecSource = inputbox("Access's Table name needed")
Adodc1.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & PathName
Adodc1.RecordSource = strRecSource
Adodc1.Refresh
なんて,していたのですが,これをどうすればよいのでしょうか
Dim wkCnn as adodb.connection
Dim WkCat as ADOX.Catalog

Set wkCnn = New ADODB.Connection
wkCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & PathName
Set wkCat = New ADOX.Catalog
wkCat.ActiveConnection = wkCnn
Label.Caption = wkCat.Tables(2).Name
なんてしてみてlabelを見てみると
「MSysACEs」なんて出てきます。
ヒントをもう少しいただけないでしょうか。
投稿日時 - 2001-07-05 21:53:22
  • 回答No.4
レベル12

ベストアンサー率 65% (276/422)

さらに 田吾作7です ← もどった。 よくよくソースをみるとAdodc1ってのがあるってことは・・・ [ADO Data Control]を使用してるのかな? strRecSource にはSQL文が入っていないといけないから、テーブルの一覧をすでに取得していないと、使えないよね。 SQL文って「select * from TableName」って感じだから、このソースを実行する前に、どの ...続きを読む
さらに 田吾作7です ← もどった。

よくよくソースをみるとAdodc1ってのがあるってことは・・・
[ADO Data Control]を使用してるのかな?

strRecSource にはSQL文が入っていないといけないから、テーブルの一覧をすでに取得していないと、使えないよね。
SQL文って「select * from TableName」って感じだから、このソースを実行する前に、どのテーブルを参照するか決めてなきゃいけないので、たぶんテーブル一覧のルーチンはこのプログラムの前に実行することになると思うんだけど・・・

なので、
strRecSource = inputbox("Access's Table name needed")
から
Adodc1.Refresh
まで、書いてあるけど 質問の意図とちょっとはずれた部分のソースを書いているような気が・・・(ごめんね、責めてるわけじゃないよ)

なので、もし下記の回答が答えになってなかったら、リストを取得し何がしたいのかまで教えてもらえると、的確に答えやすいので、よかったらそれも教えてください。

でわでわ
お礼コメント
nox_neo

お礼率 85% (66/77)

お返事本当にありがたく思っています。
教えていただいた,DebugTablesの
For Each wkTbl In wkCat.Tables
Debug.Print wkTbl.Type & " : " & wkTbl.Name
Next wkTbl
の部分をリストにしてみました。
私はプログラム初心者で今回ADOなるものに触るのは
これが初めてです。
もちろん,SQLというのは聞いたことはあるのですが,
使ったことさえありません。
親切に教えていただいたにもかかわらず,
理解できなくて申し訳なく思っています。
ところで私が何をしたかったかというと,
ADOを触るためにおっしゃった通り,
[ADO Data Control]を使いました。
そして,ADOコントロールを使うために設定せよと,
参考書に書いていた通りに
connectionStringとRecordSourceを設定しようとしました。
しかし,connectionStringは下に書いた通り,コモンダイアログを
利用して,Accessファイルを指定できるのですが,
その中のテーブル名を指定できず困っていました。

一応,内容はそこそこ理解できたのですが,まだまだですので
また,頼らせてください。
重ね重ねありがとうございました。
投稿日時 - 2001-07-06 16:12:01
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ