SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

ASP VB Script oo4o + SQL 応用編4 oo4o 更新 - ExecuteSQL

oo4o は、Oracle RDBMS でみ使用可能です。

■データ更新、レコード更新 (追加、修正、削除)

  Public Const ORADB_DEFAULT   = &H0
  dim dbname
  dim cnuser

'** oo4o 接続
  dbname = ""
           '|_ Oracle サービス名(別名)"
  cnuser = "SAK/SAK"
           '|   |_ パスワード
           '|_ ユーザ名
  if isempty(session("OraSession")) then
    Set session("OraSession") = Server.CreateObject("OracleInProcServer.XOraSession")
  end
  if isempty(session("OraDatabase")) then
    Set session("OraDatabase") = session("OraSession").OpenDatabase(dbname, cnuser, ORADB_DEFAULT)
  end

'** RDB 処理
  session("OraSession").BeginTrans
  session("OraDatabase").ExecuteSQL "insert into sak.テストm values " _
    & "('a001', 10, 20, 30)"
  session("OraSession").CommitTrans

■補足

  ・以上の様に、session("OraDatabase").ExecuteSQL で、SQL 文の insert、
    update、delete を発行して、全ての更新が可能となります。
    尚、create や drop などの命令も発行できます。
    SQL すべてが発行可能ですので、色々と試してみると良いでしょう。

■トランザクション

  ・複数の session("OraDatabase").ExecuteSQL で発行したリクエストをひと
    つのトランザクションとして処理するには、
      session("OraSession").BeginTrans   (トランザクション開始)
      session("OraSession").CommitTrans  (トランザクション終了)
      session("OraSession").Rollback     (トランザクションキャンセル)
    を使用します。

■現実的なコード例

<%@ Language=VBScript %>
<%
'=======================================================================
'  準備
'=======================================================================
  Public Const ORADB_DEFAULT   = &H0
  dim dbname
  dim cnuser

'** エラートラップ開始
  on error resume next

'** サービス、ユーザ設定
  dbname = ""
  cnuser = "SAK/SAK"
  '// Oracle サービス名(別名)、ユーザ・パスワード指定

'** oo4o 接続
  if isempty(session("OraSession")) then
    Set session("OraSession") = Server.CreateObject("OracleInProcServer.XOraSession")
    if err <> 0 then
      response.write("<P>データベースに接続出来ません。<BR>" _
        & "CreateObject - Oracle oo4o エラー</P>")
    end if
  end if
  if isempty(session("OraDatabase")) then
    Set session("OraDatabase") = session("OraSession").OpenDatabase(dbname, cnuser, ORADB_DEFAULT)
    if err <> 0 then
      response.write("<P>データベースに接続出来ません。<BR>" _
        & err & ": " & error & "</P>")
    end if
  end if

'** エラートラップ終了
  on error goto 0

'=======================================================================
'  処理
'=======================================================================

'** RDB 処理
  if RdbShori() then
    response.write("<P>-- RDB 更新正常終了 --</P>")
  end if

'=======================================================================
'  RDB 処理
'=======================================================================
function RdbShori()

'** エラーセット
  RdbShori = FALSE

'** エラートラップ開始
  on error resume next

'** oo4o エラーリセット
  session("OraDatabase").LastServerErrReset

'** トランザクション開始
  session("OraSession").BeginTrans

'** RDB 処理1
  session("OraDatabase").ExecuteSQL "insert into sak.テストm values " _
    & "('a001', 10, 20, 30)"
  if err <> 0 or session("OraDatabase").LastServerErr <> 0 then
    session("OraSession").Rollback
    response.write("<P>RDB 更新1 に失敗しました。<BR>" _
      & err & ": " & error & "<BR>" _
      & "oo4o: " & session("OraDatabase").LastServerErrText & "</P>")
    exit function
  end if

'** RDB 処理2
  session("OraDatabase").ExecuteSQL "insert into sak.テストm values " _
    & "('b002', 100, 200, 300)"
  if err <> 0 or session("OraDatabase").LastServerErr <> 0 then
    session("OraSession").Rollback
    response.write("<P>RDB 更新2 に失敗しました。<BR>" _
      & err & ": " & error & "<BR>" _
      & "oo4o: " & session("OraDatabase").LastServerErrText & "</P>")
    exit function
  end if

'** トランザクション終了
  session("OraSession").CommitTrans

'** エラートラップ終了
  on error goto 0

'** 正常セット
  RdbShori = TRUE

end function
%>

■説明

  ・以上で、おわかりのように、RDB 処理1 と 2 がどちらも正常に終了した場
    合のみ更新結果が本当に反映され、どちらかがエラーになったときは、
    何ひとつ更新がなかった状態に戻されます。

■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■ASP VB Script 基礎編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK