
お世話になります。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) 配列にしたセル範囲でのコメントがあるかどうかを取得するコードの書き方 2 2022/09/17 05:09
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
-
4
vba Listviewでのチェックボックスのイベントを教えてください
Excel(エクセル)
-
5
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
6
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
7
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
8
ACCESS VBA レコードセットの参照方法について
その他(データベース)
-
9
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
10
Excel 1セル当りの文字数が255文字を超える場合のADOからの取
その他(プログラミング・Web制作)
-
11
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
12
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
13
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
14
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
15
VBAでテキストボックス内の編集をする方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで定数を利用したい。
-
データがあれば○○なければのSQL
-
Access2000でフォームのボタン...
-
ACCESS97 のモジュールの中 何...
-
社員名簿から検索する関数
-
ACCESSで実行時エラー3008
-
アクセスで連続データをテーブ...
-
VBAでテーブル名とカラム名を動...
-
oo4oでデータベース接続
-
ACCESS VBAでテーブル内の特定...
-
ACCESS DCOUNTの抽出条件について
-
男性に対して、『女性への気遣...
-
「ご処理進めて頂きますようお...
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
エクセルVBAで、MsgBox やInput...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
お家デートをしててハグを長い...
-
「PC Helpsoft Driver Updated...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
【access】複数のフィールドの...
-
アクセスで連続データをテーブ...
-
Access vbaで重複レコードの削...
-
ACCESS VBAでテーブル内の特定...
-
SQLServer→Access インポート
-
VBAでテーブル名とカラム名を動...
-
sql文で削除クエリを書く
-
重複した複数のレコードを1レ...
-
抽出条件でデータ型が一致しま...
-
別のaccessファイルからデータ...
-
アクセスで定数を利用したい。
-
Accessで縦と横を入れ替えたい
-
DAOでSQLServerに接続し、LeftJ...
-
ACCESSのクエリ、SQLに変数を使...
-
ACCESSで実行時エラー3008
-
社員名簿から検索する関数
-
VB.NETでテーブルを作成
-
ACCESSで購入回数を表示する方...
おすすめ情報