2015/04/05

Access のパラメータクエリでトランザクションを行って PostgreSQL のデータを更新する方法


Access 2010 の VBA + ADO で PostgreSQL のデータを、トランザクションを行いながらパラメータクエリ(プレースホルダ)で更新する方法になります。ODBC を使用しているので、SQL Server でもさほど手を入れなくても動作すると思います。

さて、サンプルコードでは、DSN レスで PostgreSQL に ODBC 接続を行い、トランザクション処理をパラメータクエリ(プレースホルダ)で行っています。Access ではあまり問題になることは少ないと思いますが、SQLインジェクション対策ですね。

細かい部分はサンプルコードのコメントを参考にしてください。

■サンプルコード

Private Sub commandRegist_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

On Error GoTo error_sub

    Dim con As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim param As ADODB.Parameter
    Dim conStr As String
    Dim uId As String
    Dim uName As String
    Dim sql As String
    
    
    If MsgBox("登録しますか?", vbYesNo) = vbNo Then
        Exit Sub
    End If

    '画面より値取得
    uId = Me.textUserId.Value
    uName = Me.textUserName.Value
    
    
    'DNS レスでODBC接続
    conStr = "Provider=MSDASQL;DRIVER={PostgreSQL Unicode(x64)};SERVER=localhost;DATABASE=postgres;UID=user01;PWD=password@1"
    
    Set con = New ADODB.Connection
    con.Open conStr
    
    'SQL を宣言
    sql = "INSERT INTO users (user_id, user_name) values (?,?);"
    
    'Commandをインスタンス化
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = con
    
    cmd.CommandType = adCmdText
    cmd.CommandText = sql
    
    'パラメータを作成、1つずつ
    Set param = cmd.CreateParameter("ID", adChar, adParamInput, 5)
    cmd.Parameters.Append param
    
    Set param = cmd.CreateParameter("NAME", adVarChar, adParamInput, 255)
    cmd.Parameters.Append param
    
    'パラメータに値を設定
    cmd.Parameters("ID").Value = uId
    cmd.Parameters("NAME").Value = uName
    

    'トランザクション開始
    con.BeginTrans
    
    'SQL実行
    cmd.Execute
    
    'コミット
    con.CommitTrans
    
    
    con.Close
    Set cmd = Nothing
    Set con = Nothing
    
    MsgBox "登録できました。", vbInformation

    
    Exit Sub
    
error_sub:

    'エラー発生時はロールバック
    con.RollbackTrans
    con.Close
    
    Set cmd = Nothing
    Set con = Nothing
    
    MsgBox "登録に失敗しました。", vbInformation
    MsgBox Err.Description
End Sub

 

■参考サイト


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    現在、Enty で支援を受け付けています。もしよければご支援ください。



    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから