Translate

ACCESSのVBAでADOを利用したバインド変数を利用したデータベース連携方法

ACCESSのVBAでバインド変数の利用方法 | 備忘録

今のACCESSのADOは、.NETとほぼほぼ手順が同じ。

参照設定は、[ Microsoft ActiveX Data Objects 6.1 Library ]

色々な言語をやると、久しぶりにACCESSで、しかもレガシーなVB6系であるVBAをやると、色々忘却している。

今回は、バリバリVBAをメインに使ったシステムを作るので、ADOでバインド変数を利用したデータベース連携のサンプルを載せてみる。

データ取得の例

Dim sql_con As New ADODB.Connection

Dim sql_rs As New ADODB.Recordset
Dim sql_cmd As New ADODB.Command
Dim sql_prm As New ADODB.Parameter

Set sql_con = CurrentProject.Connection
'sql_con.Open

Dim rs As Object

sql_cmd.ActiveConnection = sql_con


sql_cmd.CommandText = "select * from test where test = ?"

Set sql_prm = sql_cmd.CreateParameter("test", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters("test").Value = "aa"

Set sql_rs = sql_cmd.Execute

MsgBox sql_rs.Fields(1)




データ取得もデータ挿入も全く同じ。


Insert(データ挿入)の例

Dim sql_con As New ADODB.Connection
Dim sql_rs As New ADODB.Recordset
Dim sql_cmd As New ADODB.Command
Dim sql_prm As New ADODB.Parameter

Set sql_con = CurrentProject.Connection
'sql_con.Open

Dim rs As Object

sql_cmd.ActiveConnection = sql_con


sql_cmd.CommandText = "insert into test (test, test2) values(?, ?)"

Set sql_prm = sql_cmd.CreateParameter("test", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters("test").Value = "cc"

Set sql_prm = sql_cmd.CreateParameter("test2", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters("test2").Value = "ccc"


sql_cmd.Execute




バインド変数を利用するとSQLインジェクション対策になるけれど、VBAの場合は、コードが簡単に見られてしまうからあまり意味は無いかもしれないが、SQLの文字列つなぎで条件文組むと、SQLの構文に影響のある入力値を誤入力されると、SQL分が不成立でエラーとなり、入力チェックを強化する処理を入れる羽目になるから、バインド変数でやるのが一番楽。




このブログの人気の投稿

VBAのADOで「パラメーターが少なすぎます。xを指定してください。」と表示された場合の原因

ACCESSでバーコードスキャンしたら自動でイベントを起こす方法

PostgreSQL 11 でpg_dumpallを使ってバックアップしたデータをリストアするとき文字化けの対処法

ACCESSのVBAを実行するとACCESSが強制終了する事がある

VBSでマクロの実行時に警告を非表示にする方法

ACCESSでバーコードをスキャンして登録更新する簡単なサンプル

pgAdmin 4が遅いのは仕方がない | PostgreSQL things.

ACCESSのVBAでリストビュー(ListView)を使う為の設定 | Office365

ASP.NETのでクライアント証明書を使ったログイン認証を行う方法