- ベストアンサー
VBAでテーブル名とカラム名を動的に取得する方法
- VBAを使用してMySQLに接続し、データベースのテーブル名とカラム名を動的に取得する方法について教えてください。
- 質問者はWindows7とエクセル2007を使用しており、MySQL5.1とODBCを利用しています。
- 具体的には、特定のデータベースからテーブル名を取得し、そのテーブル名を変数や配列に格納し、さらにそれを利用してフィールド名を取得したいと考えています。現在のソースコードでは、show tables from databaseというSQL文を使用してテーブル名を取得していますが、うまく取得できずに困っています。改善策やサンプルコードを教えていただけないでしょうか?
- みんなの回答 (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
その他の回答 (2)
- MARU4812
- ベストアンサー率43% (196/452)
私も Oracle と SQLServer しかやってないけど、 > Do Until aaa.EOF > MsgBox aaa.Fields(0).Value > LOOP ADODB.Recordset は MoveNext で明示的なカレントレコードの移動が必要な気がする。 (もう、.NET 環境しかないので ADODB の資料は手元に無いわ)
- temtecomai2
- ベストアンサー率61% (656/1071)
MySQL はわからないのですが、パッと見て気になったところを。 aaa には SHOW TABLES FROM testdb の結果が Recordset として格納されてるんですよね。 ならテーブルの数だけレコード数がありますよね。 なのにそのあとでループしてるのはレコードではなくて、1件目のレコードの列をループしてますよね。 Do Until aaa.EOF MsgBox aaa.Fields(0).Value LOOP とかじゃないの?