SAK 図書館
VB oo4o + SQL 応用編3 oo4o 更新 - ExecuteSQL、CommitTrans
oo4o は、Oracle RDBMS でみ使用可能です。 ■データ更新、レコード更新 (追加、修正、削除) '** oo4o 変数宣言 dim OraSession dim OraDatabase dim dbname as string dim cnuser as string '** oo4o 接続 dbname = "" cnuser = "SAK/SAK" Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase(dbname, cnuser, ORADB_DEFAULT) '** RDB 処理 OraSession.BeginTrans OraDatabase.ExecuteSQL "insert into sak.テストm values " _ & "('a001', 10, 20, 30)" OraSession.CommitTrans '** oo4o 接続解除 Set OraDatabase = Nothing Set OraSession = Nothing ■補足 ・以上の様に、OraDatabase.ExecuteSQL で、SQL 文の insert、update、 delete を発行して、全ての更新が可能となります。 尚、create や drop などの命令も発行できます。 SQL すべてが発行可能ですので、色々と試してみると良いでしょう。 ■トランザクション ・複数の OraDatabase.ExecuteSQL で発行したリクエストをひとつのトランザ クションとして処理するには、 OraSession.BeginTrans (トランザクション開始) OraSession.CommitTrans (トランザクション終了) OraSession.Rollback (トランザクションキャンセル) を使用します。 ■現実的なコード例 Option Explicit '** oo4o 変数宣言 dim OraSession dim OraDatabase '======================================================================= ' 準備 '======================================================================= Private Sub Form_Load() dim dbname as string dim cnuser as string '** エラートラップ開始 on local error resume next '** アイキャッチ表示 'Load FormLogo 'FormLogo.Show 'DoEvents '// 接続に 10 秒ほどかかるので、「データベース接続中...」などの '// モードレスダイアログを表示すると良い。 '** サービス、ユーザ設定 dbname = "" cnuser = "SAK/SAK" '// Oracle サービス名(別名)、ユーザ・パスワード指定 '** oo4o 接続 Set OraSession = CreateObject("OracleInProcServer.XOraSession") if err <> 0 then MsgBox "データベースに接続出来ません。" & chr(10) _ & "CreateObject - Oracle oo4o エラー" end end if Set OraDatabase = OraSession.OpenDatabase(dbname, cnuser, ORADB_DEFAULT) if err <> 0 then MsgBox "データベースに接続出来ません。" & chr(10) _ & err & ": " & error end end if '** アイキャッチ終了 'Unload FormLogo '// 接続が完了すれば、「データベース接続中...」をクローズする。 '** エラートラップ終了 on local error goto 0 End Sub '======================================================================= ' 後始末 '======================================================================= Private Sub Form_Unload(Cancel As Integer) '** oo4o 接続解除 Set OraDatabase = Nothing Set OraSession = Nothing End Sub '======================================================================= ' メイン '======================================================================= Private Sub Command1_Click() '** RDB 処理 if RdbShori(OraDatabase) then msgbox "RDB 更新正常終了。" end if End Sub '======================================================================= ' RDB 処理 '======================================================================= private function RdbShori(OraDatabase) as boolean '** エラーセット RdbShori = FALSE '** エラートラップ開始 on local error resume next '** oo4o エラーリセット OraDatabase.LastServerErrReset '** トランザクション開始 OraSession.BeginTrans '** RDB 処理1 OraDatabase.ExecuteSQL "insert into sak.テストm values " _ & "('a001', 10, 20, 30)" if err <> 0 or OraDatabase.LastServerErr <> 0 then OraSession.Rollback MsgBox "RDB 更新1 に失敗しました。" & chr(10) _ & err & ": " & error & chr(10) _ & "oo4o: " & OraDatabase.LastServerErrText exit function end if '** RDB 処理2 OraDatabase.ExecuteSQL "insert into sak.テストm values " _ & "('b002', 100, 200, 300)" if err <> 0 or OraDatabase.LastServerErr <> 0 then OraSession.Rollback MsgBox "RDB 更新2 に失敗しました。" & chr(10) _ & err & ": " & error & chr(10) _ & "oo4o: " & OraDatabase.LastServerErrText exit function end if '** トランザクション終了 OraSession.CommitTrans '** エラートラップ終了 on local error goto 0 '** 正常セット RdbShori = TRUE end function ■説明 ・以上で、おわかりのように、RDB 処理1 と 2 がどちらも正常に終了した場 合のみ更新結果が本当に反映され、どちらかがエラーになったときは、 何ひとつ更新がなかった状態に戻されます。 ■VB oo4o + SQL 応用編資料
■VB ADO + SQL 応用編資料
■VB RDO + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料