
お世話になります。
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
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
6
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
9
ADO+ODBCでテーブルに接続する時のエラー
MySQL
-
10
ACCESS VBA レコードセットの参照方法について
その他(データベース)
-
11
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
12
サブフォームのイベント取得
Visual Basic(VBA)
-
13
参照設定は2.8と6.0 6.1とどちらにチェッ
その他(Microsoft Office)
-
14
レコードが存在しなかった場合
Microsoft ASP
-
15
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで定数を利用したい。
-
DAOでSQLServerに接続し、LeftJ...
-
SQLServer→Access インポート
-
ACCESS VBAでテーブル内の特定...
-
社員名簿から検索する関数
-
ACCESSで購入回数を表示する方...
-
重複した複数のレコードを1レ...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでCOPYを繰り返すと、処理が...
-
UPS警告音を止めたい
-
月度は何て読みますか?
-
VBA エンターキーでイベントに...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
-
UMLでの例外処理
-
VBAにてメッセージボックスを最...
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
CloseとDisposeの違い
マンスリーランキングこのカテゴリの人気マンスリー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について
おすすめ情報