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 テクニック編資料