SAK 図書館
VB oo4o + SQL 応用編1 oo4o 接続 - CreateObject、OpenDatabase
Oracle oo4o でのアクセスについて説明する。
レスポンス速度的には最高速となる。
oo4o は、Oracle RDBMS でみ使用可能です。
■Oracle oo4o
機能として、
Oracle 接続 (connect)
レコードセット処理 (select)
トランザクション処理 (commit、rollback)
アクションクエリ実行 (insert、update、delete)
を使います。
尚、oo4o の .close メソッド系は内部的になにもしていないので、
Set オブジォクト = Nothing で処理します。
■oo4o 接続(Oracle 接続、オラクル接続)
'** oo4o 変数宣言
dim OraSession
dim OraDatabase
dim dbname as string
dim cnuser as string
'** oo4o 接続
dbname = ""
'|_ Oracle サービス名(別名)"
cnuser = "SAK/SAK"
'| |_ パスワード
'|_ ユーザ名
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase(dbname, cnuser, ORADB_DEFAULT)
'** RDB 処理
'ここに操作コードが入る
'** oo4o 接続解除
Set OraDatabase = Nothing
Set OraSession = Nothing
■補足
・実際の VB コードでは、oo4o 接続は、フォームロードで行う。
アクセスの度に接続していてはレスポンスが悪い。
■接続プール
・OraSession.CreateDatabasePool のようにコネクションプールを使用して
接続することもできる。
■OraSession メソッド
OraSession.OpenDatabase (データベース接続)
OraSession.BeginTrans (トランザクション開始)
OraSession.CommitTrans (トランザクションコミット)
OraSession.Rollback (トランザクションロールバック)
OraSession.ResetTrans (トランザクション無条件ロールバック)
OraSession.LastServerErrReset (ラストエラーリセット)
Set OraSession = Nothing (セッションクローズ)
■OraSession プロパティ
OraSession.OIPVersionNumber (Oracle バージョン)
OraSession.LastServerErr (ラストエラーコード)
OraSession.LastServerErrText (ラストエラーメッセージ)
■OraDatabase メソッド
OraDatabase.ExecuteSQL (SQL 実行)
OraDatabase.CreateSQL (OraSqlStmt の作成)
OraDatabase.CreateDynaset (ダイナセット作成)
OraDatabase.CreateCustomDynaset (カスタムダイナセット作成)
OraDatabase.CreatePlsqlDynaset (PL/SQL ダイナセット作成)
OraDatabase.CreatePlsqlCustomDynaset (カスタム PL/SQL ダイナセット作成)
OraDatabase.LastServerErrReset (ラストエラーリセット)
Set OraDatabase = Nothing (コネクトクローズ)
■OraDatabase プロパティ
OraDatabase.Connect (コネクトユーザ名)
OraDatabase.DatabaseName (サービス名)
OraDatabase.RDBMSVersion (Oracle バージョン)
OraDatabase.LastServerErr (ラストエラーコード)
OraDatabase.LastServerErrPos (ラストエラーホジション)
OraDatabase.LastServerErrText (ラストエラーメッセージ)
OraDatabase.Options (オプションフラグ値)
■OpenDatabase 定数
Public Const ORADB_DEFAULT = &H0
Public Const ORADB_ORAMODE = &H1
Public Const ORADB_NOWAIT = &H2
Public Const ORADB_DBDEFAULT = &H4
Public Const ORADB_DEFERRED = &H8
■古い書き方?
DbOpenDatabase、DbExecuteSQL、DbCreateSQL、DbCreateDynaset、
DbBeginTrans、DbCommitTrans、DbRollback 等の Db はなくても良い。
■現実的なコード例
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
■更に現実的なコードアドバイス
・サービス名、ユーザ名をコード中に定義するより、初期化ファイルなどを
使用してプログラムと独立させる方が可搬性に富んでいる。
この場合、パスワードなどがもろ見えになってしまっては困る。
暗号化関数を作成して、隠蔽処理など必ず実施する。
■VB oo4o + SQL 応用編資料
■VB ADO + SQL 応用編資料
■VB RDO + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料