AccessからMySQLへADO接続

AccessからMySQLへADO接続する方法について
ODBC接続ではなくADOで接続したいと思いADO接続をした時の備忘録です。

開発環境:win7 + access2010 + MySQL

 

ADOの接続文字列をiniファイルで管理
 [メリット]
  ・客先導入時や各クライアント毎に設定が異なる場合でもiniファイルで修正可能になる。
 [デメリット]
  ・セキュリティは良いのか?という点。

⇒お客様に確認した所、iniファイルが良いということでiniファイルに接続文字を設定しておいて
 利用する方法になりました。
 各環境によってドライバが違うので各々修正と確認が必要です。

iniファイル

<設定内容>

[MYSQL]
SERVER_NAME=localhost
DB_NAME=hoge
DB_USER=root
DB_PASS=pass
DRIVER_NAME=MySQL ODBC 5.1 DRIVER

⇒設定値は環境に合わせて修正します。
メモ帳(秀丸等)を新規に開いて上記の設定値を入れます。
保存する際に~.iniになるようにファイル保存します。
 
 

<標準モジュール>

' iniファイル
Public Const IniFileName = "hoge.ini"

' DB接続用共通変数
Public GsServerName As String
Public GsDataBase As String
Public GsUserName As String
Public GsPassword As String
Public GsDriverName As String

Rem -----------------------------------------------------------
Rem     関数名   : ReadINI
Rem     処理内容 : INIファイルの情報取得
Rem     引  数  : Section,Entry
Rem     戻り値  : 無し
Rem -----------------------------------------------------------
Public Function ReadINI(Section As String, Entry As String) As String
  Dim n As String * 255
  Dim rc As Long
  
  rc = GetPrivateProfileString(Section, Entry, "", n, 255, MyPath & IniFileName)
  ReadINI = funLeftB(n, InStr(n, Chr(0)) - 1)

End Function

Rem -----------------------------------------------------------
Rem     関数名   : conConnectStr
Rem     処理内容 : ADO接続します
Rem     引  数  : 無し
Rem     戻り値  : 無し
Rem -----------------------------------------------------------
Public Function conConnectStr() As String
    
On Error GoTo ERR

    ' 接続文字列取得
    GsServerName = ReadINI("MYSQL", "SERVER_NAME")
    GsDataBase = ReadINI("MYSQL", "DB_NAME")
    GsUserName = ReadINI("MYSQL", "DB_USER")
    GsPassword = ReadINI("MYSQL", "DB_PASS")
    GsDriverName = ReadINI("MYSQL", "DRIVER_NAME")
    
    ' 接続文字列作成
    conConnectStr = "Driver={" & GsDriverName & "};" _
            & " SERVER=" & GsServerName & ";" _
            & " DATABASE=" & GsDataBase & ";" _
            & " USER=" & GsUserName & ";" _
            & " PASSWORD=" & GsPassword & ";"
    
Exit Function
ERR:
    MsgBox "環境設定ファイルを確認してください。" + Chr$(10) + "読み込めませんでした。", vbCritical
End Function

 
 

例)帳票フォームの一覧表示
<フォーム>

'***************************
' 画面起動時
'***************************
Private Sub Form_Open(Cancel As Integer)   
    ' 初期化処理
    Call subInitControl
End Sub

Rem -----------------------------------------------------------
Rem     関数名   : subSetInputdata
Rem     処理内容 : 該当するデータをカレント表示する。
Rem     引  数  : なし
Rem     戻り値  : なし
Rem -----------------------------------------------------------
Private Sub subSetInputdata()
Dim objCon As New ADODB.Connection
Dim objRs  As New ADODB.Recordset
Dim strSql As String
Dim chkStatus As String

On Error GoTo Error

    ' データベースを開く
    objCon.ConnectionString = conConnectStr
    objCon.Open
    
    ' カーソル設定
    objRs.CursorLocation = adUseClient

    ' SQL実行
    strSql = "SELECT * FROM m_stf"
    
    '=================
    ' 検索条件生成
    '=================
    mstrWhere = ""
    ' スタッフコード
    If Nz(Me.txtStfCode.value) <> "" Then
        If mstrWhere = "" Then
            mstrWhere = " WHERE stf_code = '" & Me.txtStfCode.value & "'"
        End If
    End If
    ' スタッフ名
    If Nz(Me.txtStfName.value) <> "" Then
        If mstrWhere = "" Then
            mstrWhere = " WHERE stf_name Like '%" & Me.txtStfName.value & "%'"
        Else
            mstrWhere = mstrWhere & " AND stf_name Like '%" & Me.txtStfName.value & "%'"
        End If
    End If
   
    strSql = strSql & mstrWhere
    strSql = strSql & " ORDER BY stf_code"
    objRs.Open strSql, objCon, adOpenDynamic, adLockPessimistic

    ' レコードセットの複製をコピー
    Set Me.Recordset = objRs.Clone
    
    ' 後処理
    objRs.Close
    Set objRs = Nothing

    Me.Requery
                
Exit Sub
Error:
    MsgBox "エラーが発生しました。エラー内容:" & ERR.Description & Chr$(10), vbCritical, C_MSG_TITLE
End Sub

こんな感じです。
表示するだけならリンクテーブル不要!です。
リンクテーブルは基本的に帳票用で使ったり
クエリを使う際は必要になりますので、結局使うのですが
普通に表示して更新するだけの画面であればクエリ不要です。

コメント

タイトルとURLをコピーしました