• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでテーブル名とカラム名を動的に取得したい。)

VBAでテーブル名とカラム名を動的に取得する方法

このQ&Aのポイント
  • VBAを使用してMySQLに接続し、データベースのテーブル名とカラム名を動的に取得する方法について教えてください。
  • 質問者はWindows7とエクセル2007を使用しており、MySQL5.1とODBCを利用しています。
  • 具体的には、特定のデータベースからテーブル名を取得し、そのテーブル名を変数や配列に格納し、さらにそれを利用してフィールド名を取得したいと考えています。現在のソースコードでは、show tables from databaseというSQL文を使用してテーブル名を取得していますが、うまく取得できずに困っています。改善策やサンプルコードを教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答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

その他の回答 (2)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答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

専門家に質問してみよう