【自動化】実行ユーザーごとで接続文字列を変更しよう!【VBA】
みなさん。こんにちは!
VBAで外部データをやりとりするツールがやっと完成!
でも他のユーザーに実行してもらうと接続文字列を自分用に設定してしまっていて動かないので、ユーザー自身にコードを書き換えてもらって…。
これだとあまりに不便ですよね。
ということで!接続文字列をユーザーごとに自動で書き換えて接続してくれるコードをご紹介します!
今回はSQL Serverを使いますが、一部分をご自身が利用するデータベース用に書き換えれば応用できます!
テスト準備
SQL Serverから取得するデータ、「users」テーブルを作成します。
フォーム準備
まずは、データベースに接続する処理を実行させるフォームを作ります!
ここでのポイントは接続文字列に必要な要素をフォームで入力してもらえるようにテキストボックスを用意することです!
では、接続文字列に必要な要素とは何かを説明していきます。
★で囲んでいる部分がユーザーごとで変化する部分
ConnectionString = "DRIVER=SQL Server;" _
& "Server= ★サーバー名★ ;" _
& "Database= ★データベース名★ ;" _
& "TrastConnection:No;" _
& "UID= ★ユーザ★ ;" _
& "PWD= ★パスワード★ ;"
使用するデータベースで接続文字列の書き方が変わるので、書き方を調べて、フォームも作り変えてください!
コードで文章を固定してしまうと、
コード画面を開く
接続文字列を生成しているコードを探す
書き換える
コード画面を閉じる
実行
というようにユーザーにたくさんステップを踏ませてしまい、不便です。
そのため、フォームでユーザーに入力してもらった情報を接続文字列に書き込むようにすれば、
フォームに接続情報を入力する
実行
となり、利便性がかなり向上します。
コード
以下、VBAコードです。
'「接続する」ボタンを押下して動く処理
Private Sub btnSqlConnect_Click()
Dim cnSQL As New ADODB.Connection
Dim rsSQL As New ADODB.Recordset
'SQL Server用の接続文字列関数の呼び出し
strSQLConn = Me.BuildSQLConnectString
'関数の結果、空だった場合は処理終了
If strSQLConn = "" Then Exit Sub
'関数で作成した接続文字列で接続
cnSQL.Open strSQLConn
rsSQL.Open "users", cnSQL, , adLockReadOnly
Debug.Print "id:" & rsSQL("id") & " name:" & rsSQL("name")
Set cnSQL = Nothing
Set rsSQL = Nothing
End Sub
'===================================================
'SQL Server接続文字列作成
'
'引数:
'
'戻り値:
' True 接続文字列
' False 空文字
'===================================================
Function BuildSQLConnectString() As String
Dim ret As String '戻り値用変数
'入力値チェックしつつ、接続文字列組み立て
If IsNull(Me.Server) Or _
IsNull(Me.Database) Or _
IsNull(Me.Uid) Or _
IsNull(Me.Pwd) Then
Call MsgBox("「SQL Server接続情報」に未入力の項目があります。" & vbCrLf & "全項目入力してください。", vbOKOnly, "SQLServer接続文字列組み立て不可")
Else
ret = "DRIVER=SQL Server;" _
& "Server=" & Me.Server & ";" _
& "Database=" & Me.Database & ";" _
& "TrastConnectio=:No;" _
& "UID=" & Me.Uid & ";" _
& "PWD=" & Me.Pwd & ";"
End If
BuildSQLConnectString = ret
End Function
肝になるのは2節目の関数です。
フォームで入力した内容をMeキーワードで取得して、フォーム準備で説明した部分に当てはめています。
フォームの入力でどれか1つでも空だった場合はエラーメッセージを表示させて戻り値に空文字を返す処理を行っています。
実行結果
イミディエイトウィンドウにテストで作成したテーブルのデータが表示されていますね!
今回はDebug.Printでイミディエイトウィンドウに表示させていますが、Recordsetオブジェクトで情報を受け取っているので汎用性が高いです!
おわりに
VBAの接続文字列は出現頻度が多いので、少しでも便利に使えるようにしたいですよね!
この記事以外にもVBAについて便利にするための記事をたくさん投稿していますので、よろしければそちらもご覧ください!
最後までお読みいただき、ありがとうございました!
この記事が気に入ったらサポートをしてみませんか?