SQL用API
oo4o/Oracle Objects for OLE
oo4o Oracle Objects for Ole オラクルオブジェクツフォーオーエルイーとは?
oo4o/Oracle Objects for OLE
oo4oとは
oo4oは、『Oracle Objects for OLE』の略でOracleが開発したOracleにデータベース接続する為のプログラミングインタフェースです。
OLE/Object Linking and Embedding(オブジェクトリンクと組み込み)仕様をサポートさえしていれば、Oracleに接続する事ができます。
oo4o参照設定
oo4oをVBで利用する為には、DAOやADO同様、ライブラリの参照設定を行う必要があり、『Oracle InProc Server ? Type Library』を指定します(「?」にはバージョンが入ります)。
oo4oのメソッド/プロパティ
object.method
object.property
oo4oのオブジェクトにおけるメソッド、プロパティは、オブジェクトに続けてドット、メソッド名またはプロパティ名と記述することによって指定または参照します。
oo4oによるデータベースアクセス/VB6.0
Dim sess As OraSession
Dim db As OraDatabase
Dim dset As OraDynaset
oo4oには、OraSessionオブジェクト、OraDatabaseオブジェクト、OraDynasetオブジェクトなどがあり、オブジェクト名は異なるものの、DAOとADOを混ぜたようなイメージで基本的にはDAO/ADOと同じです。
Set sess = CreateObject(" OracleInProcServer.XOraSession ")
Set db = sess.OpenDatabase( "db_name" , "scott/tiger" , 0& )
Set dset = db.CreateDynaset( "SELECT * FROM foo" , 0& )
oo4oのデータベースアクセス方法は、まず、CreateObject()メソッドでセッションを確立し、OraSessionオブジェクトにSet、OraSessionオブジェクトの『OpenDatabase()メソッド』を使ってDBを開き、OraDatabaseオブジェクトにSet、OraDatabaseオブジェクトの『CreateDynaset()メソッド』を使ってSELECTなどのSQL命令を実行、OraDynasetオブジェクトにSet、結果を返す必要のないINSERT/UPDATE/DELETE文は『ExecuteSQL()メソッド』で実行します。
db.BeginTrans ' sess.BeginTransでも可
db.Execute " INSERT INTO table_name VALUES ( value1 , value2 , ...) "
db.Execute " UPDATE table_name SET ... "
db.Execute " DELETE FROM table_name WHERE ... "
db.CommitTrans ' sess.CommitTransでも可
' 取り消す場合は、db.Rollbackまたはsess.Rollback
尚、『ExecuteSQL()メソッド』の前にOraSessionまたはOraDatabaseオブジェクトのBeginTransメソッドでトランザクションを開始、同じくCommitTransで実行(コミット)、取り消す場合にはRollbackメソッドを使用します。
SQLデータ操作言語(DML/Data Manipulation Language)であるselect/insert/update/deleteの内、selectではSQLの結果を取得してOraDynasetオブジェクトにSetするわけですが、アクセスできるのは1レコードずつなので全てのレコードにアクセスする為にはループ処理が必要となります。
' End Of FileがFalse(レコードの終わりじゃない間ループ)
while dset.EOF = False
...
Wend ' While end
' 行移動:dset.MoveFirst/dset.MoveLast/dset.MovePrevious/dset.MoveNext
' 列参照:dset.Fields("col_name")というカラム名でアクセス
各データ(列)は、レコードごとにリスト(配列)として格納されており、OraDynasetオブジェクトのFields()コレクションに(例では)dset.Fields("col_name")のように列名を渡すことで参照できます。
' OraDynasetのレコード移動用メソッド
' MoveFirst (先頭行へ移動)
' MoveLast (最終行へ移動)
' MovePrevious (前の行へ移動)
' MoveNext (後ろの行へ移動)
oo4oにおいてループ中の行の移動に関する各メソッドの意味はこの通りです。
dset.Close
db.Close
' sess.Close
' Set dset=Nothing
' Set db=Nothing
' Set sess=Nothing
使い終わったら開いた各オブジェクトを閉じ、必要に応じて明示的にメモリ領域を使用済みであることを示す為にNothingをセットします。
尚、dset.Close(とSet dset=Nothing)はOraDynaset取得直後でも可、また一般的にOraSession(例ではsess)は、オーバーヘッドの側面から他の関数等々も含め、データベース接続の必要がなくなる一連の処理が終わった後に閉じます。
というわけで全体像は下記のようになります。
' 例)VB6.0
Sub OraDB_Access_via_oo4o()
Dim sess As OraSession
Dim db As OraDatabase
Dim dset As OraDynaset
...
Set sess = CreateObject(" OracleInProcServer.XOraSession ")
Set db = sess.OpenDatabase( "db_name" , "scott/tiger" , 0& )
' select文の場合
Set dset = db.CreateDynaset( "SELECT * FROM foo" , 0& )
...
while dset.EOF = False
...
Wend
dset.Close
' Set dset=Nothing
...
' insert/update/delete文の場合
db.BeginTrans ' sess.BeginTransでも可
db.Execute " INSERT INTO table_name VALUES ( value1 , value2 , ...) "
db.Execute " UPDATE table_name SET ... "
db.Execute " DELETE FROM table_name WHERE ... "
db.CommitTrans ' sess.CommitTransでも可
' 取り消す場合は、db.Rollbackまたはsess.Rollback
...
db.Close
' sess.Close
' Set db=Nothing
' Set sess=Nothing
END Sub