VisualBasic から OO4O を使って、表にアクセスしてみる(その他更新編)
Select 編は、読んでいただけましたか?Dynaset を使用する方法と、Bind
を使用した参照方法、2つを書きました。
単なる1レコードの読みこみ(照会)だけならば、Dynaset
で十分です。コーディングも短いですし、気軽に使えます。
ようは、適材適所というか、○鹿の一つ覚えのように、Dynaset
を使うのはダメということです。
さて、参照の次は当然、更新,追加,削除です。参照を含めて、この4つが使えれば、大体のPGは問題なく作成できます(よね?)
1.Dynaset を使う
参照の時に使った、Dynaset
を用いて、更新,追加,削除をしましょう。
--------------------------------------------------------------------------------
Dim W_Sql As Object
Dim W_Dyna As Object
W_Sql = "select item1 from tblA"
Set W_Dyna = OraDatabase.dbCreateDynaset(W_Sql,&H0&)
W_Dyna.dbEdit '(A)
W_Dyna.fields("item1") = "ABC" '(B)
W_Dyna.dbUpdate '(C)
--------------------------------------------------------------------------------
簡単です。超が付くほど。
(A) では、「これからレコードの編集をするぞ」と宣言し、
(B) にて、更新対象の項目に、値をセットし、
(C) で、更新を実行しています。
更新処理(Update) を行うには、dbUpdate メソッドを、Dynaset
に対して実行してやれば良いのです。
(当然、カレントレコードが対象になります)
なにも考えてないコーディングですが、これだけで更新できます。実際にはもっと項目が多いですから、
コーディングは煩雑ですけど。
追加の場合はこうです。
--------------------------------------------------------------------------------
Dim W_Sql As Object
Dim W_Dyna As Object
W_Sql = "select item1 from tblA"
Set W_Dyna = OraDatabase.dbCreateDynaset(W_Sql,&H0&)
W_Dyna.dbAddNew '(A)
W_Dyna.fields("item1") = "ABC" '(B)
W_Dyna.dbUpdate '(C)
--------------------------------------------------------------------------------
更新の時と、そう差が有りません。
dbEdit メソッドが、dbAddNew メソッドに変わるだけです。最終的に、(C)の
dbUpdate を実行した時点で、
Insert されます。
さらに、削除の場合は、こうです。
--------------------------------------------------------------------------------
Dim W_Sql As Object
Dim W_Dyna As Object
W_Sql = "select item1 from tblA"
Set W_Dyna = OraDatabase.dbCreateDynaset(W_Sql,&H0&)
W_Dyna.dbDelete '(A)
--------------------------------------------------------------------------------
これはもう、こんなんで良いんでしょうか、っていうくらい簡素なコードです。
これで簡単に削除されてしまうレコードは、カワイソウになってきます。
2.Dynaset を使わない更新操作
当然、Dynaset を使用しなくても、更新や追加,削除は可能です。
1件ずつの更新や削除なら、Dynaset
でも良いと思います。しかし、まとめて更新や削除するとき
には、いちいち Dynaset を使う必要はありません。
SQL 文を実行するために、dbExecuteSQL メソッドを使います。
例を見ていただくと、一目瞭然でしょう。
(1)更新
Dim W_Sql As String
W_Sql = "update "
W_Sql = W_Sql & "tblA "
W_Sql = W_Sql & "set "
W_Sql = W_Sql & "item1 = 'AAA'"
W_Sql = W_Sql & "where "
W_Sql = W_Sql & "item2 = '123'"
OraDatabase.dbExecuteSQL(W_Sql)
(2) 削除
Dim W_Sql As String
W_Sql = "delete from "
W_Sql = W_Sql & "tblA "
W_Sql = W_Sql & "where "
W_Sql = W_Sql & "item2 = '123'"
OraDatabase.dbExecuteSQL(W_Sql)
いかがでしょうか。更新用の SQL 文を作成して、dbExecuteSQL
にて実行するだけです。
簡単ですね。
対象が1件だけなら、Dynaset
と変わりないかも知れませんが、複数件有るときはとても
便利です。