
お世話になります。
VBAでMySQLに接続をし、DB操作をするものを作成しています。
・Windows7
・エクセル2007
・MySQL 5.1
・ODBC
そこで、以下のことをしたいと思っています。
(1)ある特定のデータベースの中にあるテーブル名を全取得
(2)そのテーブル名を変数または配列に格納
(3)そのテーブル名をキーに、今度はフィールド名を全取得
私が組んでみた該当のソースの部分は、
Dim aaa As New ADODB.Recordset
strSql = "show tables from testdb;"
Set aaa = con.Execute(strSql) 'conはADODB.connection
Dim j As Integer
For j = 1 To aaa.Fields.Count
MsgBox aaa.Fields(j -1).name
Next
・・・とここまで来ました。
show tables from databaseで、データベースにあるテーブルを取得して、
aaa.Fields(j -1).nameには「Tables_in_testdb」が入ります。
その次に、もう消してしまったので無いのですが、
msgbox aaa.Fields("Tables_in_testdb")?とやってみたところ、
データベースに入っている一つのテーブル名だけしか取得できませんでした。
ソースが回りくどい気がする+テーブル名が取得出来ず、
大分煮詰まっています。。。
何かもっとうまい書き方や構文(サンプル)ありましたら教えてください!!!
No.3ベストアンサー
- 回答日時:
XL2000のコードですけれど、ご参考まで。
SELECT * とかでテーブルからレコードセットを取得して、Fields(i).nameを取得してみたけれど、
重たそうなので更に調べてみると、ADOでもDESCRIBEが使える様です。
(DESCでも良いけれど、降順と紛らわしいので)
ADOの参照設定要です。
Sub test()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset
Dim strSQL As String
'XAMPPのMYSQLのデータベースにODBC接続してみた
cn.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};DATABASE=*****;" _
& "PWD=******;PORT=3306;SERVER=localhost;" _
& "STMT=SET NAMES utf8;UID=******"
cn.Open
strSQL = "SHOW TABLES;"
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly
Do Until rs.EOF
Debug.Print rs.Fields(0)
strSQL = "DESCRIBE " & rs.Fields(0) & ";"
rs2.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly
Do Until rs2.EOF
'最後に余分な,がつくのは手抜きです
Debug.Print rs2.Fields(0) & ",";
rs2.MoveNext
Loop
Debug.Print
rs2.Close
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set rs2 = Nothing
cn.Close
Set cn = Nothing
End Sub
参考URL:http://support.microsoft.com/kb/193332/ja
No.2
- 回答日時:
私も Oracle と SQLServer しかやってないけど、
> Do Until aaa.EOF
> MsgBox aaa.Fields(0).Value
> LOOP
ADODB.Recordset は
MoveNext で明示的なカレントレコードの移動が必要な気がする。
(もう、.NET 環境しかないので ADODB の資料は手元に無いわ)

No.1
- 回答日時:
MySQL はわからないのですが、パッと見て気になったところを。
aaa には SHOW TABLES FROM testdb の結果が Recordset として格納されてるんですよね。
ならテーブルの数だけレコード数がありますよね。
なのにそのあとでループしてるのはレコードではなくて、1件目のレコードの列をループしてますよね。
Do Until aaa.EOF
MsgBox aaa.Fields(0).Value
LOOP
とかじゃないの?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
vba Listviewでのチェックボックスのイベントを教えてください
Excel(エクセル)
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
6
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
ADO+ODBCでテーブルに接続する時のエラー
MySQL
-
10
ACCESS VBA レコードセットの参照方法について
その他(データベース)
-
11
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
12
サブフォームのイベント取得
Visual Basic(VBA)
-
13
レコードが存在しなかった場合
Microsoft ASP
-
14
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
15
参照設定は2.8と6.0 6.1とどちらにチェッ
その他(Microsoft Office)
-
16
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
17
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで縦と横を入れ替えたい
-
テーブル作成クエリを実行した...
-
Access vbaで重複レコードの削...
-
【access】複数のフィールドの...
-
ACCESS DCOUNTの抽出条件について
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBA エンターキーでイベントに...
-
VBAでCOPYを繰り返すと、処理が...
-
【Excel】特定の文字を含むセル...
-
月度は何て読みますか?
-
switch の範囲指定
-
Excelシート上のマクロを登録し...
-
CloseとDisposeの違い
-
エクセルVBAで、MsgBox やInput...
-
マクロ初心者です。 msgboxのre...
-
UMLでの例外処理
-
お家デートをしててハグを長い...
-
IQテストの数列
-
EagleGetというフリーソフトに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS DCOUNTの抽出条件について
-
アクセスで定数を利用したい。
-
データがあれば○○なければのSQL
-
Access vbaで重複レコードの削...
-
【access】複数のフィールドの...
-
sql文で削除クエリを書く
-
VBAでテーブル名とカラム名を動...
-
【PHP/MySQL】コード上で生成...
-
DAOでSQLServerに接続し、LeftJ...
-
Accessリンクするテーブルが見...
-
ACCESSで購入回数を表示する方...
-
ACCESS VBAでテーブル内の特定...
-
CMD.Executeの結果をメッセージ...
-
アクセスのテーブルのフィール...
-
BBSのレスを表示させるためのSQ...
-
SQL EXCEL VBA 接続
-
重複した複数のレコードを1レ...
-
社員名簿から検索する関数
-
Access から Excelのシートをイ...
-
Accessについて
おすすめ情報