SAK 図書館

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

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 テクニック編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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



Copyright (C) 1999-2024 Y.SAK