VBAを利用したテーブル名とフィールド名一覧取得

Lucea
2014-06-12 14:18 2062 1
VBAを利用したテーブル名とフィールド名一覧取得
_
Cn.Open StrCnSQL
Cat.ActiveConnection = Cn

For Each c In Cat.Tables
'/**システムを除くため2013年以後作成テーブルに**/
'/**Attribute条件不可?**/
If Year(c.DateCreated) >= 2013 Then

'/**データベース上の全テーブル名称取得**/
'/**Where 1 = 2 でテーブル構造のみ取得**/
Str = c.Name
SQL = "Select * From " & c.Name & " Where 1 = 2;"
Rs.Open SQL, Cn, adOpenForwardOnly, adLockReadOnly


'/**各テーブルのフィールド取得**/
'/**配列の中身 = テーブル名 + スペース + フィールド名
For i = 0 To Rs.Fields.Count - 1
ReDim Preserve Ar(ArCnt)
Ar(ArCnt) = Str & Space(4) & Rs(i).Name
ArCnt = ArCnt + 1
Next i
Rs.Close
End If
Next c


◆現在上記コードでVBAからSQL Serverへ接続し、データベース
上の全テーブル名と各テーブルのフィールド名を取得しています。

1. ADOで接続
2. ADOX.Catalogを使用してFor Each から全テーブル名取得
3. テーブル中身をレコードセットに格納してフィールド名取得


◆質問
上記手順2では、不要なシステムファイルを除くためにテーブル
作成日が2013年以後の条件(c.DateCreated >= 2013)とし
ていますが、一般的にはどのような条件にするのでしょうか?

Attributeは不可でした。(理由はわかりません orz)なお、
テーブル以外にビューまで取得されます。

現在VBAとSQLを学習中です。
アドバイスよろしくお願い致します。。

コメント

2014年 06月 17日 (19:22)
こんにちは。
イノ(inno)です。

下記のSQLを参考してください。

--システムデータベースを除く
SELECT * FROM sys.databases WHERE name NOT IN ('master','model','msdb','tempdb')

--ユーザーのテーブルのみ取得(システムテーブル除く)
SELECT * FROM sys.objects WHERE [type] = 'U'

実際に実行して結果を確認してみてください。