AccessからMySQLへADO接続

スポンサーリンク

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

開発環境:win7 + access2010 + MySQL

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

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

iniファイル

<設定内容>
[text]
[MYSQL]
SERVER_NAME=localhost
DB_NAME=hoge
DB_USER=root
DB_PASS=pass
DRIVER_NAME=MySQL ODBC 5.1 DRIVER
[/text]
⇒設定値は環境に合わせて修正します。
メモ帳(秀丸等)を新規に開いて上記の設定値を入れます。
保存する際に~.iniになるようにファイル保存します。

<標準モジュール>
[vb]
‘ 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
[/vb]

例)帳票フォームの一覧表示
<フォーム>
[vb]
‘***************************
‘ 画面起動時
‘***************************
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
[/vb]

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

スポンサーリンク
広告
広告

フォローする