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 テクニック編資料