MDBファイル内に存在するテーブル名(ObjectName)を取得したいのですが
For nCnt = 0 To CurrentDb.TableDefs.Count - 1
Debug.Print CurrentDb.TableDefs(nCnt).Name
Next
↑の用にコレクション?を取得するとテーブル名の取得は出来るのですが
テーブル以外(マクロ,Form,Module etc) のObject名も取得してしまいます。
テーブルのObject名のネーミングに制約を設ける等はしたくないのですが
取得したObjectのTypeを拾えるような事はできるのですか?
ちなみにOfficeは97です。
宜しくお願いします。
さらにテーブル定義(オラクルのALL_TAB_COLUMNS)の様な
各テーブルの列定義情報を取得する方法等はあるのでしょうか?
CurrentDb.TableDefs(nCnt).Attributes=0
でどうですか?
補足。。。
これが正しいとは確証がないですが。。。
私のやっている方法は。。。
このSQLでテーブル名を取得しています。
SELECT MSysObjects.Name AS テーブル名, MSysObjects.Type
FROM MSysObjects
WHERE (((MSysObjects.Name) Not Like 'MSys*') AND ((MSysObjects.Type)=1));
e-bunさんご回答ありがとうございます。
さっそくやってみたのですが。
テーブル名のみの取得は出来ました。
しかし、質問のしかたが悪かったようです?
テーブル名の取得を行うプログララムはVB側なのです。
只今、DAOで試してみたとこMSysObjectsへの権限が無い
と怒られてしまいました。
このシステムテーブルはカレントDBでなければ使用できないのでしょうか?
と言う事でアクセスアプリケーションのCreateからDatabase
参照を挟みRecodeSet取得とすればできました。
が!Access.Applicationを起動すると言うのがやっぱり重いのです。
さらにCreateObjectのアクセスをウィンドウ無しにしたい。。
どんどん訳が解らなくなっていますが
手っ取り早く言うと某ToolのObjectBrowserと言う市販Tool
と同様のツールを今作成しています。DB形式にとらわれずに
マネージメントしたいと考えております。
もう少し調べて見ます、何かお解りでしたらご教示ください。
MSysObjectsを利用するにはAccess側の設定が必要です。
>DB形式にとらわれず
世界中の何種類あるかわからないコンピュータの
何種類あるかわからないDBの何種類あるかわからない
接続にすべて対応するのは事実上不可能です。
私なら「RBASEとThe Card2とSP-MUMPUSと知子の情報に
つなぎたい」と言われただけで途方にくれてしまいますが・・・。
(すべてDOS系パソコン用DBであるにもかかわらずです。)
ADOを使用してカタログObjectみたいなものを使用し
テーブル名の取得ができたはずです。
詳細がわからなくてすみませんが。
ObjectBrowserを自作するとの事。
確かにあのツールがあると作業効率が格段にUpしますね。
1ライセンスが10万ぐらいなので個人ではとても手が出ませんが
あのツールはODBCのドライバー別にベンダー設定をし、DSNが必須となる為
DB形式にとらわれないとは言えないのではないでしょうか
私もマトリックスの自動生成(Oracle)のみですが自作しました。
配布する環境が無いのですが、よろしければソース公開しますよ。
これでできます。
Sub List_TablesInCatalog()
Dim conObj As New ADODB.Connection
Dim catObj As New ADOX.Catalog
Dim tblObj As New ADOX.Table
'---対象のMDBへ接続なのだ。(ここではサンプルMDBです。)
conObj.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &_
"Data Source=C:\Program Files\Microsoft Office\" &_
"Office\Sample\Northwind.mdb;"
Set catObj.ActiveConnection=conObj
'---テーブル名とテーブルタイプを全て列挙
For Each tblObj In catObj.Tables
Debug.Print "Name=";tblObj.Name;" Type=";tblObj.Type
Next
Set catObj=Nothing
conObj.Close
End Sub
CatalogオブジェクトですがDAOでは対応していませんのでご注意を
ツイート | ![]() |