#613 SQL Serverへの接続文字列を組み立てるには? VBA

SQL Server上のデータベースのテーブルなどを扱う際には、ODBCを使ってリンクテーブルにしたり、ADPを使ったりする方法がありますが、初期設定によって固定的にSQL Server名やデータベース名、あるいは認証方法などを設定しなければなりません。

そこで、SQL Serverへの接続文字列をその都度、動的に組み立てて接続することによって、たとえばオプション設定画面のようなところでユーザーが任意にその接続先を変えることができます。

ここでは、具体的なSQL Server上のテーブル操作までは説明しませんが、SQL Serverへの接続文字列を組み立てる方法の例について紹介します。


まず、設定画面として次のようなフォームを用意するものとします。


ここでは次のような名前で各コントロールが配置されています。
  • SQL Server名のテキストボックス → 「SQLServer名」
  • データベース名のテキストボックス → 「SQLServerデータベース名」
  • 認証方法のオプショングループ → 「SQLServer認証方法」
  • 認証方法のオプションボタンのオプション値 → Windows認証=「1」、SQL Server認証=「2」
  • ログインIDのテキストボックス → 「SQLServerログインID」
  • パスワードのテキストボックス → 「SQLServerパスワード」
  • [接続]のコマンドボタン → 「cmd接続」
実際には各コントロールへの入力値をテーブルに保存し、他の画面からの接続ではそのテーブルの保存値を参照して接続するといった使い方になると思いますが、ここではこのフォーム上のボタンで接続を試みるまでの例とします。


次に、[接続]ボタンのクリックのクリック時イベントプロシージャを作ります。なおここではADOを使ったプログラムとなっていますので、事前に「Microsoft ActiveX Data Objects X.X Library」への参照設定を行っておく必要があります。

Private Sub cmd接続_Click()
'[接続]ボタンクリック時

  Dim Con As New ADODB.Connection
  Dim strConnectionStr As String

  On Error GoTo Err_Handler

  '接続文字列の組み立て
  strConnectionStr = "Provider=SQLOLEDB; " & _
                      "Data Source=" & Me!SQLServer名 & "; " & _
                      "Initial Catalog=" & Me!SQLServerデータベース名 & "; "
  If Me!SQLServer認証方法 = 1 Then
    'Windows認証のとき
    strConnectionStr = strConnectionStr & "Integrated Security=SSPI;"
  Else
    'SQL Server認証のとき
    strConnectionStr = strConnectionStr & _
                        "USER ID=" & Me!SQLServerログインID & "; " & _
                        "PASSWORD=" & Me!SQLServerパスワード & ";"
  End If

  'SQL Serverへの接続
  With Con
    '接続文字列の設定
    .ConnectionString = strConnectionStr
    '接続の実行
    .Open
    .Close
  End With
  Set Con = Nothing

  Beep
  MsgBox "SQL Serverへの接続に成功しました!", vbOKOnly + vbInformation

Exit_Here:
  Exit Sub

Err_Handler:
  Select Case Err.Number
    Case Is < 0
      Beep
      MsgBox "SQL Serverへの接続に失敗しました!", vbOKOnly + vbExclamation
  End Select
  Resume Exit_Here:

End Sub


実行例:


※この例では、SQL Serverへ接続を試みるだけ(ConnectionのOpenメソッドを実行してすぐにClose)ですが、実際には接続したあとにCommandオブジェクトを使うなどして、各テーブル等を操作していきます。
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved