データベース(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 |
実行結果
関連記事
-
BOF プロパティ・EOF プロパティ(ADO)
EOF プロパティ・BOF プロパティ BOF プロパティは、カレントレコードの …
-
CSVファイルに接続(ADO)
ADOでCSVファイルに接続 ADO を使用してCSVファイルを読み込みます。C …
-
フィールド名(ADO)Field オブジェクト
Field オブジェクト Recordset オブジェクト内の列(フィールド)を …
-
フィールド名(ADO)Fields コレクション
Fields コレクション Recordset オブジェクト内の1つ以上の列(フ …
-
データベース(SQL Server)に接続する(ADO)
データベース(SQL Server)に接続 ODBC または OLE DB で接 …
-
レコードの追加(ADO)AddNew メソッド,Update メソッド
データベースにレコードを追加する AddNew メソッド 新規レコードを追加し、 …
-
Excel VBA のクラスを使ってデータベースへ接続する(ADO)
データベースの処理をクラスモジュールに書く ExcelVBAで、クラス使用する方 …
-
カレントレコードの移動(ADO)MoveFirst、MoveLast、MoveNext、MovePrevious、Move
MoveFirst メソッド、MoveLast メソッド、MoveNext メソ …
-
レコードを指定した条件で抽出する(ADO)Filter プロパティ
データベースのレコードを指定した条件で抽出する Filter プロパティ 【書式 …
-
クエリの作成・削除(ADOX)
ADOX を使用してクエリを作成・削除 クエリを作成する手順 【書式】 <参照設 …