SAK 図書館
VB RDO + SQL 応用編 (その二) RDO 更新 - Execute、CommitTrans
RDO による更新は、SQL 文法をそのまま送信して行います。
尚、SQL Plus 実行時の最後の『;』は、VB からは必要ありません。
VB 固有の edit などによる更新は、言語に左右されやすいので説明しません。
10 万件程度の更新では、SQL をそのまま発行しても問題なしです。
もしかすると、edit 等の構文より高速かもしれません。
基本的に Oracle、SQL-Sever、MDB で共通です。
■データ更新、レコード更新 (追加、修正、削除)
'** RDO 変数宣言
Dim RDBen As rdoEnvironment
Dim RDBcn As rdoConnection
Dim RDBcn2 As rdoConnection
'** ODBC 接続
Set RDBen = rdoEnvironments(0)
Set RDBcn = RDBen.OpenConnection("", rdDriverNoPrompt, False, _
"dsn=SAK3;uid=SAK;pwd=SAK") '|_ I/O
Set RDBcn2 = RDBen.OpenConnection("", rdDriverNoPrompt, True, _
"dsn=SAK3_ADO;uid=SAK;pwd=SAK") '|_ read only
'** RDB 処理
RDBcn.Execute "insert into sak.練習テーブル名 values " _
& "(データ1, データ2...)", rdExecDirect
'** ODBC 接続解除
RDBcn2.Close
RDBcn.Close
以上の様に、RDBcn.Execute で、SQL 文の insert、update、delete を発行して
全ての更新が可能となります。
尚、create や drop などの命令も発行できます。
SQL すべてが発行可能ですので、色々と試してみると良いでしょう。
■補足
・実際の VB コードでは、ODBC 接続は、フォームロードで行う。
アクセスの度に接続していてはレスポンスが悪い。
同じく、ODBC 接続解除は、フォームアンロードで行う。
『VB RDO + SQL 応用編 (その一) RDO 接続』の説明やサンプルソースを
参考にして下さい。
■トランザクション
複数の RDBcn.Execute で発行したリクエストをひとつのトランザクションとし
て処理するには、
RDBcn.BeginTrans (トランザクション開始)
RDBcn.CommitTrans (トランザクション終了)
RDBcn.RollbackTrans (トランザクションキャンセル)
を使用します。
■現実的なコード例
Option Explicit
'** RDO 変数宣言
Dim RDBen As rdoEnvironment
Dim RDBcn As rdoConnection
Dim RDBcn2 As rdoConnection
'=======================================================================
' 準備
'=======================================================================
Private Sub Form_Load()
Dim dsn As String
Dim dsn2 As String
Dim rcd As Long
'** アイキャッチ表示
'Load FormLogo
'FormLogo.Show
'DoEvents
'// 接続に 10 秒ほどかかるので、「データベース接続中...」などの
'// モードレスダイアログを表示すると良い。
'** DSN 設定
dsn = "dsn=SAK3;uid=SAK;pwd=SAK"
dsn2 = "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
'// ODBC システム DSN を使用しての接続例である。
'** ODBC 接続
On Local Error Resume Next
Set RDBen = rdoEnvironments(0)
Set RDBcn = RDBen.OpenConnection("", rdDriverNoPrompt, False, dsn)
rcd = Err
On Local Error GoTo 0
If rcd <> 0 Then
MsgBox "データベースに接続出来ません。(RDBcn)"
end
End If
On Local Error Resume Next
Set RDBcn2 = RDBen.OpenConnection("", rdDriverNoPrompt, True, dsn2)
rcd = Err
On Local Error GoTo 0
If rcd <> 0 Then
MsgBox "データベースに接続出来ません。(RDBcn2)"
end
End If
'** アイキャッチ終了
'Unload FormLogo
'// 接続が完了すれば、「データベース接続中...」をクローズする。
End Sub
'=======================================================================
' 後始末
'=======================================================================
Private Sub Form_Unload(Cancel As Integer)
'** ODBC 接続解除
On Local Error Resume Next
RDBcn.Close
RDBcn2.Close
On Local Error GoTo 0
End Sub
'=======================================================================
' メイン
'=======================================================================
Private Sub Command1_Click()
'** RDB 処理
if RdbShori(RDBcn) = FALSE then
msgbox "RDB 更新に失敗しました。"
else
msgbox "RDB 更新正常終了。"
end if
End Sub
'=======================================================================
' RDB 処理
'=======================================================================
private function RdbShori(RDBcn as rdoConnection) as boolean
'** エラーセット
RdbShori = FALSE
'** トランザクション開始
RDBcn.BeginTrans
'** エラートラップ開始
on local error resume next
'** RDB 処理1
RDBcn.Execute "insert into sak.練習テーブル名 values " _
& "(データ1, データ2...)", rdExecDirect
if err <> 0 then
RDBcn.RollbackTrans
exit function
end if
'** RDB 処理2
RDBcn.Execute "insert into sak.練習テーブル名 values " _
& "(データ1, データ2...)", rdExecDirect
if err <> 0 then
RDBcn.RollbackTrans
exit function
end if
'** エラートラップ終了
on local error goto 0
'** トランザクション終了
RDBcn.CommitTrans
'** 正常セット
RdbShori = TRUE
end function
以上で、おわかりのように、RDB 処理1 と 2 がどちらも正常に終了した場合の
み更新結果が本当に反映され、どちらかがエラーになったときは、何ひとつ更新
がなかった状態に戻されます。
■SQL エラーコード、メッセージの引き取り
一般の VB 実行時エラーと同じに SQL 実行のエラーも引き取れる。
SQL 文に起因するものは、SQL Plus で実行してみれば、更に詳細なエラーを
見極めることができる。
尚、on local error goto 0 で、エラーコードはリセットされるので注意。
dim errcd as long
dim errms as string
on local error resume next
RDBcn.Execute "insert into sak.練習テーブル名 values " _
& "(データ1, データ2...)", rdExecDirect
errcd = err '** エラーコード
errms = error '** エラーメッセージ
on local error goto 0
■VB RDO + SQL 応用編資料
■VB ADO + SQL 応用編資料
■VB oo4o + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料