【成功】SQLServerのテーブルを1件ずつ読み込み(SELECT)、処理が終わったら処理完了フラグを立てる(UPDATE)
ODBC連携をようやく使い始めました。
資料が少なく試行錯誤の末うまく動作したので情報共有してみます。
SQLServerのテーブルを1件ずつ読み込み(SELECT)、処理が終わったら処理完了フラグを立てる(UPDATE)というシナリオです。
■ODBC連携を行なうにあたって、「データ一覧」と「繰り返しグループ」のどちらを使うか?
今回はDB指定を埋め込める「繰り返しグループ」を選びました。
<データ一覧>
データの参照と更新両方できる。しかしDB指定は起動起動時ショートカットに埋め込むしかなく、パスワードとか人目にさらしたくない場合は使えない。
<繰り返しグループ>
データの参照のみ可能。更新不可。更新には別途スクリプトを作らないといけない。DB指定はシナリオ中に埋め込める。
■読み込むテーブルについて
処理完了フラグがOFFのテーブルを読み込ませるにあたって、Where指定ができないのでSQLServer側でViewを作っておきます。
ポイントは、FROM句にWITH (NOLOCK)指定してロックさせないようにしておくこと!
繰り返しグループで読み込まれたテーブルはテーブルロックするようで、その後のUPDATEができなくなります。
UPDATEすると「クエリが時間切れになりました」エラーが発生。はまりました。。
■UPDATE用のスクリプト
始めてスクリプト作りしたが、ここのおかげでできした。
https://dietwork.net/?p=1821
' ADOコネクションを生成
Set objConn = CreateObject("ADODB.Connection")
' DB接続情報をセット
objConn.ConnectionString = "DSN=HOGEHOGE;UID=hoge;PWD=hoge;"
' 接続をOpen
objConn.Open
' SQLを発行
key1 = !主キー!
SQL = "UPDATE テーブル"
SQL = SQL & " SET 処理完了フラグ = 'ON'"
SQL = SQL & " WHERE (主キー = '" & key1 & "');"
objConn.Execute SQL,,adCmdText
' 接続をClose
objConn.Close
Set objConn = Nothing
■DSN設定
WinActorで利用されるのは32ビット用ODBC設定ですね。
デスクトップにてVBScriptとして実行しようとしたら、64bit用ODBC設定が必要で、そのままでは動きませんでした。
環境:WinActor6.3
OS:Windows10 64bit
以上、誰かの参考になれば。。。