データベース(Oracle)に接続する(oo4o)
oo4o 接続
OO4O(Oracle Objects for OLE)はWindows用アプリケーション向けにOracleが提供しているデータベース接続ミドルウエアで、DAOに類似したインターフェースを利用します。
11gR2 を最後に 12c 以降は提供されなくなりました。
oo4o データベース(Oracle)への接続
<参照設定>
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 |
実行結果
関連記事
-
クエリの作成・削除(ADOX)
ADOX を使用してクエリを作成・削除 クエリを作成する手順 【書式】 <参照設 …
-
フィールド名(ADO)Field オブジェクト
Field オブジェクト Recordset オブジェクト内の列(フィールド)を …
-
データベース(SQL Server)に接続する(ADO)
データベース(SQL Server)に接続 ODBC または OLE DB で接 …
-
Recordset オブジェクト内のレコード数(ADO)RecordCount プロパティ
RecordCount プロパティ Recordset オブジェクトのレコード数 …
-
レコードを並べ替える(ADO)Sort プロパティ
データベースのレコードを並べ替える Sort プロパティ 【書式】 object …
-
トランザクション(ADO)BeginTrans、CommitTrans、RollbackTrans
ADO でのトランザクション処理 【書式】 Sub Sample_Transac …
-
データベース(Oracle)に接続する(OLE DB を使用)
OLE DB プロバイダ OLE DBには、Oracle 提供の Oracle …
-
クエリにパラメータを渡して結果を取得する(ADO)Command オブジェクト・Execute メソッド
クエリにパラメータを渡して結果を取得する手順 Command オブジェクトの作成 …
-
テーブル名、クエリ名の取得(ADOX)
テーブル名の取得 Table.Type プロパティ 【書式】 <取得> obje …
-
レコードを指定した条件で抽出する(ADO)Filter プロパティ
データベースのレコードを指定した条件で抽出する Filter プロパティ 【書式 …