• ベストアンサー

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

  • VBAでAccessのテーブルのエクスポート・インポートをするには。

    すみませんが、教えてください。 Excel+VBAで、AccessをSQL,ADO,ADOXで操作しようとしています。 a.mdbのテーブルを、b.mdbに、エクスポート(インポート)したいのですが、やり方がわからず困っています。 すみませんが、テーブル構造のみをエクスポートする方法、データを含めてエクスポートする方法を教えてください。

  • アクセスで同一テーブル内へのデータの追加

    こんにちは。Access2000を使用しています。 「顧客テーブル」には「お買上げ年度」と「顧客名」フィールド があります。 「お買上げ年度」= "2007"の顧客を、「お買上げ年度」 = "2008" として「顧客テーブル」内に追加したいのですが、一度仮テーブル やCSVファイルにデータを退避することなく、クエリやVBA(ADO)で 対応することは可能でしょうか?(=同一テーブル内への追加クエリ を実行したい。)よろしくお願いいたします。

  • Access テーブルデザイン キーボードで切り替え

    Accessのテーブルデザイン キーボードで切り替え Accessのテーブルデザインで「フィールド名、データ型」の部分と「フィールドプロパティ」の部分に分かれています。その2つをキーボード操作(ショートカット)で行き来する方法は無いでしょうか? いつも、マウスで移動させているので少し面倒を感じています。 お分かりの方がいましたら教えてください。よろしくお願いします。 

  • Access テーブルの結合

    Access2002で同じ*.MDB内にある同じフウールド名、データ型を持つ複数のテーブルを結合し一つのテーブルにする方法を教えて下さい。

  • ACCESS テーブルのコピー

    XP-ProでVB.NETを使用しています。 複数のテーブルがあるMDBから、 一つのテーブルの中のデータの一部をコピーしたいと思います。 接続方法はADOです。

  • Accessでテーブル名の変更

    ACCESS初心者です。 ACCESS2000でテーブル名の頭にホスト名が入っています(テーブル数が100程あります) それを変更する関数はどのようなものがあるのでしょうか。さすがに手動で一つ一つやるのは大変なので一括でやる方法を教えて下さい。 ex)nifty_TABLE1 → TABLE1   nifty_TABLE2 → TABLE2 ・・・ すみませんがよろしくお願いします。

  • パスワード付Access2010からリンクテーブル

    パスワード付Access2010のテーブルを別のAccessでリンクテーブルとして使用しています。 このリンクテーブルを使ったクエリの結果を、ADOを使ってExcelシートに書きだしたいのですが、このリンクテーブルを使ったクエリを動かすと 「SQLステートメントが正しくありません。DELETE、INSERT、PROCEDURE、SELECTまたはUPDATEを使用してください」 というエラーメッセージが出てしまいます。 リンクテーブルのあるAccessでクエリを動かすと普通に動くのですが、ExcelからADOで動かすとエラーがでるということです。 このような場合に、エラーにならずにExcelからクエリを動かして結果をシートに出力する方法が何かありますでしょうか。 ご教授よろしくお願いいたします。

  • Access2003のテーブルが、Access2007でフィールド名の順番が変わってしまいます

    Access2003のテーブルが、Access2007でフィールド名の順番が変わってしまいます。 PCが変わり、Access2003のデータをそのまま、新しいPCにコピーしました。 新しいPCではAccess2007が入っていました。 Accessで、テーブルをデータシートビューで開いたところ Access2003の時のフィールドの表示順が崩れてしまいました。 例えて言うと Access2003では   ListNo 文献ID 登録状況 備考 Access2007では   ListNo 登録状況 文献ID 備考 の順で表示されています。 これはデータシートビューで表示の順番が変わってしまうのですが デザインビューでは、順番は変わっていないのです。 Access2007でも、Access2003のテーブルでのフィールド名の順番のまま 表示させるにはどうしたらいいでしょうか? Access2007はほとんど使ったことがないため、無知です。 いろいろ調べてはみてるのですが、調べ方も下手なのだと思いますが、これという情報にたどり着けません。 時間がないため、こちらに質問しました。 助けていただければと思います。よろしくお願いいたします。

  • Access のリンクテーブルについて

    よろしくお願い致します。 Access側から外部テーブルを参照したリンクテーブルを作成しました。 しかしそのテーブルを開くのにはすごく時間がかかり、時にAccessが応答なしの状態になったりします。 そこで、ためしにテーブル作成クエリでリンクテーブルのデータと同じデータをもつテーブルを作成しました。 すると、そのクエリで作成したテーブルからの操作はスムーズに行われました。リンクテーブルとはデータ量も同じなのにこのように重さの違いがでるのはなぜなのでしょうか? Accessを使いはじめたばかりで、裏ではどのようになっているのかよくわからずパフォーマンスのあげ方に四苦八苦しております。 アドバイスをよろしくお願いします。

  • Access テーブルのフィールド名

    AccessでレジのPOSデータを管理しています。 txtデータをインポートして、月別で管理しています。 インポートの際、項目名がついていないため、 Accessでは「フィールド1」「フィールド2」と いった名前がついています。 分析のため、「品名」「分類」といった項目名に 変えるため【テーブル】→【デザイン】でフィールド名を 一つ一つ手作業で変えています。 毎月の事なので、一度に変更できる方法があったら ご指導いただきたく質問させていただきました。 「フィールド1」=「品名」 「フィールド2」=「分類」 といったように項目は毎月同じ場所に設定されます。 説明がつたないかもしれませんが、必要でしたら補足 致しますのでよろしくお願い致します。

専門家に質問してみよう