• ベストアンサー

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

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

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

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

その他の回答 (3)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

さらに 田吾作7です ← もどった。 よくよくソースをみるとAdodc1ってのがあるってことは・・・ [ADO Data Control]を使用してるのかな? strRecSource にはSQL文が入っていないといけないから、テーブルの一覧をすでに取得していないと、使えないよね。 SQL文って「select * from TableName」って感じだから、このソースを実行する前に、どのテーブルを参照するか決めてなきゃいけないので、たぶんテーブル一覧のルーチンはこのプログラムの前に実行することになると思うんだけど・・・ なので、 strRecSource = inputbox("Access's Table name needed") から Adodc1.Refresh まで、書いてあるけど 質問の意図とちょっとはずれた部分のソースを書いているような気が・・・(ごめんね、責めてるわけじゃないよ) なので、もし下記の回答が答えになってなかったら、リストを取得し何がしたいのかまで教えてもらえると、的確に答えやすいので、よかったらそれも教えてください。 でわでわ

nox_neo
質問者

お礼

お返事本当にありがたく思っています。 教えていただいた,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ファイルを指定できるのですが, その中のテーブル名を指定できず困っていました。 一応,内容はそこそこ理解できたのですが,まだまだですので また,頼らせてください。 重ね重ねありがとうございました。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

ども 田吾作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
質問者

お礼

お返事ありがとうございました。 ご指摘の通り「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」なんて出てきます。 ヒントをもう少しいただけないでしょうか。

  • -boya-
  • ベストアンサー率35% (176/494)
回答No.1

(時間が経ってしまっていますが、、、) DatabaseオブジェクトのTableDefsコレクションのnameプロパティを 使うとAccessファイル中のテーブル名が返ってくるのではないでしょうか? [db]をデータベースとして、[db.TableDefs(i).name] をi=0から[db.TableDefs.count-1]まで繰り返して見ていけば リストにする事も可能かと思います。 もしくは、、、 [MSysObjects]テーブルを見れば、他のオブジェクトと一緒に テーブルも見えるはずです。これはシステムオブジェクトなので [ツール][オプション]の[システムオブジェクト]にチェックを 入れると表示されるはず。

nox_neo
質問者

お礼

お返事ありがとうございました。 お礼の返事が遅れてすいません。 -boya-さんが言われているとおりしてみたのですが, db.TableDefs(i).name は実行されませんでした。 ADOとDAOの違いもわからない私なのですが, 時間を割いてくださりありがとうございました。

関連するQ&A