プロが教える店舗&オフィスのセキュリティ対策術

ACCESSのデータをADOで操作したいのですけれども,
ACCESSのテーブル名をリストにする方法がわかりません。
教えてください。お願いします。

A 回答 (4件)

どもども 田吾作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はあまり使ったことがないようにお見受けしたので、参考までに・・・

でわでわ
    • good
    • 0

さらに 田吾作7です ← もどった。



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

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

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

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

でわでわ
    • good
    • 0
この回答へのお礼

お返事本当にありがたく思っています。
教えていただいた,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

ども 田吾作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"というのがあります。
それがテーブル一覧、クエリー一覧に該当します。

でわでわ・・・
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
ご指摘の通り「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

(時間が経ってしまっていますが、、、)



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

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

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

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

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

ADOとDAOの違いもわからない私なのですが,
時間を割いてくださりありがとうございました。

お礼日時:2001/07/05 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A