
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はあまり使ったことがないようにお見受けしたので、参考までに・・・
でわでわ
No.4
- 回答日時:
さらに 田吾作7です ← もどった。
よくよくソースをみるとAdodc1ってのがあるってことは・・・
[ADO Data Control]を使用してるのかな?
strRecSource にはSQL文が入っていないといけないから、テーブルの一覧をすでに取得していないと、使えないよね。
SQL文って「select * from TableName」って感じだから、このソースを実行する前に、どのテーブルを参照するか決めてなきゃいけないので、たぶんテーブル一覧のルーチンはこのプログラムの前に実行することになると思うんだけど・・・
なので、
strRecSource = inputbox("Access's Table name needed")
から
Adodc1.Refresh
まで、書いてあるけど 質問の意図とちょっとはずれた部分のソースを書いているような気が・・・(ごめんね、責めてるわけじゃないよ)
なので、もし下記の回答が答えになってなかったら、リストを取得し何がしたいのかまで教えてもらえると、的確に答えやすいので、よかったらそれも教えてください。
でわでわ
お返事本当にありがたく思っています。
教えていただいた,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ファイルを指定できるのですが,
その中のテーブル名を指定できず困っていました。
一応,内容はそこそこ理解できたのですが,まだまだですので
また,頼らせてください。
重ね重ねありがとうございました。
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"というのがあります。
それがテーブル一覧、クエリー一覧に該当します。
でわでわ・・・
お返事ありがとうございました。
ご指摘の通り「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」なんて出てきます。
ヒントをもう少しいただけないでしょうか。
No.1
- 回答日時:
(時間が経ってしまっていますが、、、)
DatabaseオブジェクトのTableDefsコレクションのnameプロパティを
使うとAccessファイル中のテーブル名が返ってくるのではないでしょうか?
[db]をデータベースとして、[db.TableDefs(i).name]
をi=0から[db.TableDefs.count-1]まで繰り返して見ていけば
リストにする事も可能かと思います。
もしくは、、、
[MSysObjects]テーブルを見れば、他のオブジェクトと一緒に
テーブルも見えるはずです。これはシステムオブジェクトなので
[ツール][オプション]の[システムオブジェクト]にチェックを
入れると表示されるはず。
お返事ありがとうございました。
お礼の返事が遅れてすいません。
-boya-さんが言われているとおりしてみたのですが,
db.TableDefs(i).name
は実行されませんでした。
ADOとDAOの違いもわからない私なのですが,
時間を割いてくださりありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLを発行とは?クエリの作成と...
-
VBとアクセスでSQL文に変...
-
『列名 '担当者CD' があいま...
-
ACCESS2010 実行時エラー 2766
-
Access2007でアプリケーション...
-
アクティブレポートを使ってDB...
-
★クリスタルレポートの元になる...
-
COBOLのINVALID KEYが理解でき...
-
ワークテーブルの作成について
-
DAOでフィールドのデータ型を変...
-
Access VBA について質問があ...
-
ExcelVBAからAccessMDB内のテー...
-
SQL同時実行違反
-
手動または分散トランザクショ...
-
Accessで宛名ラベルに同一宛先...
-
VB6でのSQLでのアクセスデータ...
-
VBA 変数名に変数を使用したい。
-
VBA(メモリ展開)
-
【VB】コンボボックスにデータ...
-
C# DataTableに最後に追加した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
VBとアクセスでSQL文に変...
-
他のMDBのテーブルに追加したい
-
手動または分散トランザクショ...
-
エクセルのテーブルを解除する...
-
COBOLのINVALID KEYが理解でき...
-
AccessからExcelへエクスポート...
-
ExcelVBAからAccessMDB内のテー...
-
CSVファイルのエクスポートでソ...
-
DAOの作成単位について
-
ワークテーブルの作成について
-
Accessで別mdbのテーブルをコピー
-
Access2007でアプリケーション...
-
DataGridViewに複数テーブルの...
-
VB.NETでのAccessテーブルリンク
-
ACCESS2010 実行時エラー 2766
-
Excel複数シートをaccessへ一括...
-
[C#] DataGridViewでコンボボッ...
-
Accessでテーブルのデータのみ...
おすすめ情報