MDBのデータディクショナリみたいな情報を取得するには


HELP  2002-01-31 22:27:29  No: 75222

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)の様な
各テーブルの列定義情報を取得する方法等はあるのでしょうか?


e-bun  2002-02-01 01:00:07  No: 75223

CurrentDb.TableDefs(nCnt).Attributes=0
でどうですか?


e-bun  2002-02-01 01:05:35  No: 75224

補足。。。
これが正しいとは確証がないですが。。。
私のやっている方法は。。。
このSQLでテーブル名を取得しています。
SELECT MSysObjects.Name AS テーブル名, MSysObjects.Type
FROM MSysObjects
WHERE (((MSysObjects.Name) Not Like 'MSys*') AND ((MSysObjects.Type)=1));


HELP  2002-02-01 02:17:44  No: 75225

e-bunさんご回答ありがとうございます。
さっそくやってみたのですが。
テーブル名のみの取得は出来ました。
しかし、質問のしかたが悪かったようです?
テーブル名の取得を行うプログララムはVB側なのです。
只今、DAOで試してみたとこMSysObjectsへの権限が無い
と怒られてしまいました。
このシステムテーブルはカレントDBでなければ使用できないのでしょうか?
と言う事でアクセスアプリケーションのCreateからDatabase
参照を挟みRecodeSet取得とすればできました。
が!Access.Applicationを起動すると言うのがやっぱり重いのです。
さらにCreateObjectのアクセスをウィンドウ無しにしたい。。
どんどん訳が解らなくなっていますが
手っ取り早く言うと某ToolのObjectBrowserと言う市販Tool
と同様のツールを今作成しています。DB形式にとらわれずに
マネージメントしたいと考えております。
もう少し調べて見ます、何かお解りでしたらご教示ください。


Say  2002-02-01 14:24:07  No: 75226

MSysObjectsを利用するにはAccess側の設定が必要です。

>DB形式にとらわれず

世界中の何種類あるかわからないコンピュータの
何種類あるかわからないDBの何種類あるかわからない
接続にすべて対応するのは事実上不可能です。

私なら「RBASEとThe Card2とSP-MUMPUSと知子の情報に
つなぎたい」と言われただけで途方にくれてしまいますが・・・。
(すべてDOS系パソコン用DBであるにもかかわらずです。)


マザー  2002-02-01 19:21:10  No: 75227

ADOを使用してカタログObjectみたいなものを使用し
テーブル名の取得ができたはずです。
詳細がわからなくてすみませんが。
ObjectBrowserを自作するとの事。
確かにあのツールがあると作業効率が格段にUpしますね。
1ライセンスが10万ぐらいなので個人ではとても手が出ませんが
あのツールはODBCのドライバー別にベンダー設定をし、DSNが必須となる為
DB形式にとらわれないとは言えないのではないでしょうか
私もマトリックスの自動生成(Oracle)のみですが自作しました。
配布する環境が無いのですが、よろしければソース公開しますよ。


HELP  2002-02-14 02:45:36  No: 75228

これでできます。
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では対応していませんのでご注意を


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加