前回は、Excel VBAでOracleに接続し、指定したSELECT文の実行結果を1シートにまとめて出力してみたが、今回はMySQL, PostgreSQL, SQL Serverそれぞれに接続し同じように結果を出力してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事のサンプルプログラムの作成が完了していること。
また、下記記事に記載されている、MySQLとPostgreSQLでのユーザー作成が完了していること。
さらに、下記記事の「前提条件」の内容が完了していること。
やってみたこと
Oracleの場合のサンプルプログラム
Oracleの場合のサンプルプログラムは、以下の前提条件の記事を参照のこと。
MySQLの場合のサンプルプログラム
MySQLの場合のサンプルプログラムは、Oracleの場合のソースコードのうち、DB接続を行うconnectDB関数と、結果出力するシート名に関する部分を変更している。connectDB関数の内容は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | '----------------------------------------------------------- ' 機能: DB接続を行う ' 引数: なし ' 返り値: DB接続コネクション '----------------------------------------------------------- Function connectDB() As ADODB.Connection '変数定義 Dim sServer As String Dim sDatabase As String Dim sUser As String Dim sPass As String Dim ADOConnection As ADODB.Connection 'DB接続情報 sServer = Worksheets("実行情報").Cells(5, 3).Value 'データベースサーバー名 sDatabase = Worksheets("実行情報").Cells(6, 3).Value 'データベース名 sUser = Worksheets("実行情報").Cells(7, 3).Value 'ユーザーID sPass = Worksheets("実行情報").Cells(8, 3).Value 'パスワード 'DB接続 On Error GoTo ErrOpenDb Set ADOConnection = New ADODB.Connection ADOConnection.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver}" _ & ";Server=" & sServer _ & ";Database=" & sDatabase _ & ";User=" & sUser _ & ";Password=" & sPass _ & ";Port=3306" _ & ";STMT=SET NAMES sjis" ADOConnection.Open Set connectDB = ADOConnection Exit Function ErrOpenDb: 'エラー時は、エラーメッセージを表示 MsgBox "エラーが発生しました" _ & vbCrLf & vbCrLf & Err.Description Set connectDB = Nothing End Function |
その他、実際に作成したVBAファイルの内容は、以下のサイトの「DbDump(MySQL).xlsm」を参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-db-one-sheet
また、MySQLのuser01データベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。
さらに、MySQLの場合の実行結果は、以下の通り。
1) サンプルプログラム「DbDump(MySQL).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。
2) 以下のように確認ダイアログが表示されるので、「はい」ボタンを押下する。なお、「いいえ」ボタンを押下した場合は、何もせず処理を終了する。
3) 取得が完了すると完了メッセージが表示されるため、「OK」ボタンを押下する。
4) 「DBダンプ(MySQL)」シートを確認すると、以下のように、Select文の実行結果が出力されることが確認できる。なお、NULL値は「(NULL)」と表示されることが確認できる。
PostgreSQLの場合のサンプルプログラム
PostgreSQLの場合のサンプルプログラムも、Oracleの場合のソースコードのうち、DB接続を行うconnectDB関数と、結果出力するシート名に関する部分を変更している。connectDB関数の内容は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | '----------------------------------------------------------- ' 機能: DB接続を行う ' 引数: なし ' 返り値: DB接続コネクション '----------------------------------------------------------- Function connectDB() As ADODB.Connection '変数定義 Dim sServer As String Dim sDatabase As String Dim sUser As String Dim sPass As String Dim ADOConnection As ADODB.Connection 'DB接続情報 sServer = Worksheets("実行情報").Cells(5, 3).Value 'データベースサーバー名 sDatabase = Worksheets("実行情報").Cells(6, 3).Value 'データベース名 sUser = Worksheets("実行情報").Cells(7, 3).Value 'ユーザーID sPass = Worksheets("実行情報").Cells(8, 3).Value 'パスワード 'DB接続 On Error GoTo ErrOpenDb Set ADOConnection = New ADODB.Connection ADOConnection.ConnectionString = "Provider=MSDASQL;Driver=PostgreSQL Unicode(x64)" _ & ";Server=" & sServer _ & ";Database=" & sDatabase _ & ";UID=" & sUser _ & ";PWD=" & sPass _ & ";Port=5432" ADOConnection.Open Set connectDB = ADOConnection Exit Function ErrOpenDb: 'エラー時は、エラーメッセージを表示 MsgBox "エラーが発生しました" _ & vbCrLf & vbCrLf & Err.Description Set connectDB = Nothing End Function |
その他、実際に作成したVBAファイルの内容は、以下のサイトの「DbDump(PostgreSQL).xlsm」を参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-db-one-sheet
また、PostgreSQLのODBCドライバをインストールする必要がある。その手順は、以下のサイトを参照のこと。
https://www.projectgroup.info/documents/PostgreSQL/POS_000008.html
さらに、PostgreSQLのUSER01データベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。
また、PostgreSQLの場合の実行結果は、以下の通り。
1) サンプルプログラム「DbDump(PostgreSQL).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。
2) 以下のように確認ダイアログが表示されるので、「はい」ボタンを押下する。なお、「いいえ」ボタンを押下した場合は、何もせず処理を終了する。
3) 取得が完了すると完了メッセージが表示されるため、「OK」ボタンを押下する。
4) 「DBダンプ(PostgreSQL)」シートを確認すると、以下のように、Select文の実行結果が出力されることが確認できる。なお、NULL値は「(NULL)」と表示されることが確認できる。
SQL Serverの場合のサンプルプログラム
SQL Serverの場合のサンプルプログラムも、Oracleの場合のソースコードのうち、DB接続を行うconnectDB関数と、結果出力するシート名に関する部分を変更している。connectDB関数の内容は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | '----------------------------------------------------------- ' 機能: DB接続を行う ' 引数: なし ' 返り値: DB接続コネクション '----------------------------------------------------------- Function connectDB() As ADODB.Connection '変数定義 Dim sServer As String Dim sDatabase As String Dim sUser As String Dim sPass As String Dim ADOConnection As ADODB.Connection 'DB接続情報 sServer = Worksheets("実行情報").Cells(5, 3).Value 'データベースサーバー名 sDatabase = Worksheets("実行情報").Cells(6, 3).Value 'データベース名 sUser = Worksheets("実行情報").Cells(7, 3).Value 'ユーザーID sPass = Worksheets("実行情報").Cells(8, 3).Value 'パスワード 'DB接続 On Error GoTo ErrOpenDb Set ADOConnection = New ADODB.Connection ADOConnection.ConnectionString = "Provider=SQLOLEDB" _ & ";Data Source=" & sServer _ & ";Initial Catalog=" & sDatabase _ & ";UID=" & sUser _ & ";PWD=" & sPass ADOConnection.Open Set connectDB = ADOConnection Exit Function ErrOpenDb: 'エラー時は、エラーメッセージを表示 MsgBox "エラーが発生しました" _ & vbCrLf & vbCrLf & Err.Description Set connectDB = Nothing End Function |
その他、実際に作成したVBAファイルの内容は、以下のサイトの「DbDump(SQLServer).xlsm」を参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-db-one-sheet
また、SQL Serverのmasterデータベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。
さらに、SQL Serverの場合の実行結果は、以下の通り。
1) サンプルプログラム「DbDump(SQLServer).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。
2) 以下のように確認ダイアログが表示されるので、「はい」ボタンを押下する。なお、「いいえ」ボタンを押下した場合は、何もせず処理を終了する。
3) 取得が完了すると完了メッセージが表示されるため、「OK」ボタンを押下する。
4) 「DBダンプ(SQLServer)」シートを確認すると、以下のように、Select文の実行結果が出力されることが確認できる。なお、NULL値は「(NULL)」と表示されることが確認できる。
要点まとめ
- Excel VBAでのDB接続先を、MySQL, PostgreSQL, SQL Serverそれぞれに変更することができる。その際、DB接続する処理を変更すれば、Oracleの場合と同じように動くようにできる。