SAK 図書館

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

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

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



Copyright (C) 1999-2017 Y.SAK