oo4o 接続
OO4O(Oracle Objects for OLE)はWindows用アプリケーション向けにOracleが提供しているデータベース接続ミドルウエアで、DAOに類似したインターフェースを利用します。
11gR2 を最後に 12c 以降は提供されなくなりました。
oo4o データベース(Oracle)への接続
【oo4o 接続】
<参照設定>
Dim OraSession As New OraSessionClass
Dim OraDatabase As OraDatabase
Set OraDatabase = OraSession.OpenDatabase(NetServiceName, User&Pass, Options)
<CreateObject関数>
Dim OraSession As Object
Dim OraDatabase As Object
Set OraSession = CreateObject(“OracleInProcServer.XOraSession“)
Set OraDatabase = OraSession.OpenDatabase(NetServiceName, User&Pass, Options)
引数・戻り値
- OraSession ・・・ セッション
- OraDatabase ・・・ データベース
- NetServiceName ・・・ ネットサービス名を指定します。
- User&Pass ・・・ データベースへ接続するユーザー名とパスワードを指定します。
(※書式は、[ユーザー名]/[パスワード]) - Options ・・・ データベースのオプション・モードの設定に使用するビット・フラグ文字を指定します。options = 0 の場合は、デフォルトのモード設定が適用されます。
参照設定する場合、VBE の「ツール」-「参照設定」をクリックし「参照設定ダイアログボックス」を開き、「Oracle InProc Server 5.0 Type Library」にチェックを入れます。
Options に指定できる値(定数)の一覧表
定数 | 値 | 内容 |
ORADB_DEFAULT | &H0& | Visual Basicモード(デフォルト) |
ORADB_ORAMODE | &H1& | Oracleモード |
ORADB_NOWAIT | &H2& | ロック非待機モード |
ORADB_NO_REFETCH | &H4& | Oracleモード(再フェッチなし) |
ORADB_NONBLK | &H8& | 非ブロックモード |
ORADB_ENLIST_IN_MTS | &H10& | MTSモードでのリスト |
ORADB_ENLIST_FOR_ CALLLBACK | &H20& | コールバック・モードでのリスト |
Oracle 接続(oo4o)
サンプルVBAソース1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Sub Sample_oo4o_oracle1() '参照設定「Oracle InProc Server 5.0 Type Library」 Const NETSERVICENAME = "hpdb1" 'tnsnames.ora ファイルのネットサービス名' Const USERPASS = "uhpdb1/uhpdb1" 'ユーザー名/パスワード Dim OraSession As New OraSessionClass 'セッション Dim OraDatabase As OraDatabase 'データベース Dim OraDynaset As OraDynaset 'レコードセット Dim row As Long Dim col As Long Dim strSQL As String 'SQL文 strSQL = "select * from table01 order by id" 'OraDatabaseオブジェクトの生成 Set OraDatabase = OraSession.OpenDatabase(NETSERVICENAME, USERPASS, ORADB_DEFAULT) Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_DEFAULT) With Worksheets("oracle_oo4o") .Cells.Clear 'フィールド名 For col = 0 To OraDynaset.Fields.Count - 1 .Cells(1, col + 1) = OraDynaset(col).Name Next col 'レコード Do Until OraDynaset.EOF For col = 0 To OraDynaset.Fields.Count - 1 .Cells(row + 2, col + 1) = OraDynaset(col).Value Next col row = row + 1 OraDynaset.MoveNext Loop End With OraDynaset.Close Set OraDynaset = Nothing Set OraDatabase = Nothing Set OraSession = Nothing End Sub |
実行結果
サンプルVBAソース2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
'CreateObject関数 Const ORADB_DEFAULT = &H0& Const ORADB_ORAMODE = &H1& Const ORADB_NOWAIT = &H2& Const ORADB_NO_REFETCH = &H4& Const ORADB_NONBLK = &H8& Const ORADB_ENLIST_IN_MTS = &H10& Const ORADB_ENLIST_FOR_CALLLBACK = &H20& Const ORADYN_DEFAULT = &H0& Const ORADYN_NO_AUTOBIND = &H1& Const ORADYN_NO_BLANKSTRIP = &H2& Const ORADYN_READONLY = &H4& Const ORADYN_NOCACHE = &H8& Const ORADYN_ORAMODE = &H10& Const ORADYN_NO_REFETCH = &H20& Const ORADYN_N_MOVEFIRST = &H40& Const ORADYN_DIRTY_WRITE = &H80& Sub Sample_oo4o_Oracle2() Dim OraSession As Object 'セッション Dim OraDatabase As Object 'データベース Dim OraRs As Object 'レコードセット Dim strSQL As String Dim col As Long Dim row As Long Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("hpdb1", "uhpdb1/uhpdb1", ORADB_DEFAULT) strSQL = "insert all into table01 values (4, '西田直美') " strSQL = strSQL & "into table01 values (5, '東田一行') " strSQL = strSQL & "into table01 values (6, '加藤れな') " strSQL = strSQL & "into table01 values (7, '大野吾郎') " strSQL = strSQL & "select * from dual" 'エラートラップ開始 On Local Error GoTo ErrHandler 'エラーをリセット OraDatabase.LastServerErrReset 'トランザクション処理開始 OraSession.BeginTrans 'SQL文実行 OraDatabase.Executesql strSQL 'トランザクション終了 OraSession.CommitTrans On Local Error GoTo 0 ErrHandler: If Err <> 0 Then MsgBox "【エラー番号:" & Err & "】" & vbCrLf & _ Error & vbCrLf & "更新をキャンセルしました" 'トランザクションキャンセル OraSession.Rollback End If '表示 Set OraRs = OraDatabase.CreateDynaset("select * from table01", ORADYN_DEFAULT) With Worksheets("oracle_oo4o") .Cells.Clear For col = 0 To OraRs.Fields.Count - 1 .Cells(1, col + 1) = OraRs(col).Name Next row = 0 Do Until OraRs.EOF For col = 0 To OraRs.Fields.Count - 1 .Cells(row + 2, col + 1) = OraRs(col).Value Next OraRs.MoveNext row = row + 1 Loop End With OraRs.Close Set OraRs = Nothing Set OraDatabase = Nothing Set OraSession = Nothing End Sub |