VB オラクル oo4o 操作 |
Oracle Objects for OLEインプロセス・オートメーション・サーバー OO4Oインプロセス・オートメーション・サーバーは、Oracleデータベースへの接続、SQL文やPL/SQLブロックの実行、および結果へのアクセスのための一連のCOMオートメーション・オブジェクトです。 |
[参照設定] ORACLE7 → Oracle InProc Server 2.2 Type Library ORACLE8 → Oracle InProc Server 3.0 Type Library (oip8.tlb) ORACLE9 → Oracle InProc Server 4.0 Type Library (oip9.tlb) ORACLE10 → Oracle InProc Server 5.0 Type Library (oip10.tlb) ※ 上位バージョンは下位バージョンをサポートしていません。 [変数宣言] Public OraSession As OraSession Public OraDatabase As OraDatabase Public OraDynaset As OraDynaset [オブジェクト生成] Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) |
階層ダイアグラム
【OraSession】 【OraServer】 【OraDatabase】 【OraSQLStmt】 【OraDynaset】 【OraField】 【OraParameters】 【OraParameter】 【OraParameterArray】 【OraMetaData】 【OraMDAttribute】 【OraAQ】 【OraAQMsg】 |
|
【SQL(SELECT)実行
サンプルリスト】 '*********************************************************************** ' oo4oにてDBに接続して、SELECT文を実行後、データを抽出して、DBを切断する '*********************************************************************** Private Sub DBSelect() On Error GoTo Err_Rtn Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim result Dim strSQL strSQL = "SELECT * FROM HINMST WHERE MAKERCODE = '123'" 'SQL文 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'oo4oオブジェクト生成 Set OraDatabase = OraSession.OpenDatabase("hogesvr", "hogeu/hogep", ORADB_DEFAULT) 'DB接続 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行 MsgBox OraDynaset.RecordCount & "件のレコードを抽出しました" While Not OraDynaset.EOF 'レコード数分ループ MsgBox OraDynaset.Fields("HINMEI").Value '品名を取得 OraDynaset.MoveNext '次のレコードへ DoEvents Wend Set OraDynaset = Nothing 'オブジェクト開放 Set OraDatabase = Nothing 'オブジェクト開放 Set OraSession = Nothing 'オブジェクト開放 Exit Sub '============== ' エラー処理 '============== Err_Rtn: If (OraSession.LastServerErr <> 0) Then 'OraSession でエラー発生 MsgBox OraSession.LastServerErrText 'エラー内容の表示 OraSession.LastServerErrReset 'エラーのクリア Set OraSession = Nothing 'オブジェクト開放 ElseIf (OraDatabase.LastServerErr <> 0) Then 'OraDatabase でエラー発生 MsgBox OraDatabase.LastServerErrText 'エラー内容の表示 OraDatabase.LastServerErrReset 'エラーのクリア Set OraDatabase = Nothing 'オブジェクト開放 Set OraSession = Nothing 'オブジェクト開放 Else MsgBox Err.Description 'エラー内容の表示 Set OraDynaset = Nothing 'オブジェクト開放 Set OraDatabase = Nothing 'オブジェクト開放 Set OraSession = Nothing 'オブジェクト開放 End If End Sub |
【SQL(INSERT,UPDATE,DELETE)実行
サンプルリスト】 '****************************************************** ' oo4oにてDBに接続して、UPDATE文を実行後、DBを切断する '****************************************************** Private Sub DBUpdate() On Error GoTo Err_Rtn Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim result Dim strSQL strSQL = "UPDATE HINMST SET ENDFLG = 1 WHERE MAKERCODE = '123'" 'SQL文 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'oo4oオブジェクト生成 Set OraDatabase = OraSession.OpenDatabase("hogesvr", "hogeu/hogep", ORADB_DEFAULT) 'DB接続 OraSession.BeginTrans 'トランザクション開始 result = OraDatabase.ExecuteSQL(strSQL) 'SQL文実行 MsgBox result & "レコードを更新しました。" OraSession.CommitTrans 'トランザクションコミット Set OraDatabase = Nothing 'オブジェクト開放 Set OraSession = Nothing 'オブジェクト開放 Exit Sub '============== ' エラー処理 '============== Err_Rtn: If (OraSession.LastServerErr <> 0) Then 'OraSession でエラー発生 MsgBox OraSession.LastServerErrText 'エラー内容の表示 OraSession.LastServerErrReset 'エラーのクリア Set OraSession = Nothing 'オブジェクト開放 ElseIf (OraDatabase.LastServerErr <> 0) Then 'OraDatabase でエラー発生 MsgBox OraDatabase.LastServerErrText 'エラー内容の表示 OraDatabase.LastServerErrReset 'エラーのクリア OraSession.Rollback 'トランザクションロールバック Set OraDatabase = Nothing 'オブジェクト開放 Set OraSession = Nothing 'オブジェクト開放 Else MsgBox Err.Description 'エラー内容の表示 Set OraDatabase = Nothing 'オブジェクト開放 Set OraSession = Nothing 'オブジェクト開放 End If End Sub |
●OraSession.OpenDatabaseメソッド 【機能】データベースへのユーザー・セッションを確立します。 【書式】Set OraDatabase = OraSession.OpenDatabase(データベース名, 接続文字列, オプション)
Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) 'DBへ接続 |
●OraSession.BeginTransメソッド 【機能】指定したセッション内で、データベースのトランザクションを開始します。 【書式】OraSession.BeginTrans 【 例 】 Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) OraSession.BeginTrans result = OraDatabase.ExecuteSQL(strSQL) OraSession.CommitTrans
|
●OraSession.CommitTransメソッド 【機能】セッション内に存在する全トランザクションをコミットします。 【書式】OraSession.CommitTrans 【 例 】 Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) OraSession.BeginTrans result = OraDatabase.ExecuteSQL(strSQL) OraSession.CommitTrans ※ トランザクションが開始されていないときに、CommitTransを使用するとエラーが発生します。 |
●OraSession.Rollbackメソッド 【機能】指定したセッション内で保留中の全トランザクションをロールバックします。 【書式】OraSession.Rollback 【 例 】 Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) OraSession.BeginTrans result = OraDatabase.ExecuteSQL(strSQL) OraSession.Rollback ※ トランザクションが開始されていないときに、Rollbackを使用するとエラーが発生します。 |
●OraSession.LastServerErr、OraDatabase.LastServerErrプロパティ
【 例 】 If (OraSession.LastServerErr <> 0) Then MsgBox OraSession.LastServerErrText OraSession.LastServerErrReset End If ※ Oracle Call Interface(OCI)データベースファンクションから最後に戻された0(ゼロ)以外の戻り値を示します。最後のLastServerErrReset要求以降にエラーが発生していない場合は0(ゼロ)を示します。 効率を上げるために、0(ゼロ)以外の戻り値のみを戻します。したがって、0(ゼロ)以外の値が戻されても、そのエラー生成が、一番最後にコールされたOCIデータベースファンクションによるものとはかぎりません。 |
●OraSession.LastServerErrText、OraDatabase.LastServerErrTextプロパティ 【機能】現行のLastServerErrプロパティに関連付けられているテキスト・メッセージを戻します。 【書式】result = OraSession.LastServerErrText 【書式】result = OraDatabase.LastServerErrText 【 例 】 If (OraSession.LastServerErr <> 0) Then MsgBox OraSession.LastServerErrText OraSession.LastServerErrReset End If |
●OraSession.LastServerErrReset、OraDatabase.LastServerErrResetメソッド 【機能】指定されたオブジェクトのLastServerErrプロパティを値0(ゼロ)に消去し、LastServerErrTextプロパティをNULLに設定します。 【書式】OraSession.LastServerErrReset 【書式】OraDatabase.LastServerErrReset 【 例 】 If (OraSession.LastServerErr <> 0) Then MsgBox OraSession.LastServerErrText OraSession.LastServerErrReset End If |
●OraDatabase.CreateDynasetメソッド 【機能】指定したSQL SELECT文とオプションから、OraDynasetオブジェクトを作成します。 【書式】Set OraDynaset = OraDatabase.CreateDynaset(SQL文, オプション)
Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文の実行 Set OraDynaset = Nothing
|
●OraDatabase.ExecuteSQLメソッド 【機能】SELECT以外のSQL文またはPL/SQLブロックを1つ実行して、処理された行数を戻します。 【書式】result = OraDatabase.ExecuteSQL(SQL文)
Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) OraSession.BeginTrans result = OraDatabase.ExecuteSQL(strSQL) 'SQL文の実行 OraSession.CommitTrans
|
●OraDatabase.Closeメソッド 【機能】このメソッドは何も実行しません。 Visual Basicとの互換性を保つために追加されています。 【書式】OraDatabase.Close 【 例 】Set OraDatabase = Nothing 'OraDatabaseオブジェクトのクローズ |
●OraDynaset.RecordCountプロパティ 【機能】ダイナセット内のレコードの総数を戻します。 【書式】result = OraDynaset.RecordCount 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_DEFAULT) result = OraDynaset.RecordCount '該当件数の取得 Set OraDynaset = Nothing
|
●OraDynaset.BOF、EOFプロパティ 【機能】カレント・レコードが最初のレコードの前にあるかどうか、もしくは、最後のレコードの後にあるかどうかをブール値で返します。 【書式】result = OraDynaset.BOF 【書式】result = OraDynaset.EOF 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) OraDynaset.MoveFirst While Not OraDynaset.EOF 'レコードがなくなるまでループ strHIN = OraDynaset.Fields("HIN").Value OraDynaset.MoveNext DoEvents Wend Set OraDynaset = Nothing
|
●OraDynaset.MoveFirst、MoveLast、MoveNext、MovePreviousメソッド 【機能】カーソルの位置を指定されたダイナセット内の最初、最後、次または前の行に変更します。削除された行はスキップします。 【書式】OraDynaset.MoveFirst 【書式】OraDynaset.MoveLast 【書式】OraDynaset.MoveNext 【書式】OraDynaset.MovePrevious 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) OraDynaset.MoveFirst '先頭のレコードへ While Not OraDynaset.EOF strHIN = OraDynaset.Fields("HIN").Value OraDynaset.MoveNext '次のレコードへ DoEvents Wend Set OraDynaset = Nothing
|
●Valueプロパティ 【機能】フィールドの値をVariantとして戻します。 【書式】result = OraDynaset.Fields("HIN").Value 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) OraDynaset.MoveFirst While Not OraDynaset.EOF strHIN = OraDynaset.Fields("HIN").Value '品名を取得 OraDynaset.MoveNext DoEvents Wend Set OraDynaset = Nothing |
●Countプロパティ 【機能】レコードのフィールドの数を戻します。 【書式】result = OraDynaset.Fields.Count 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count 'フィールドの数を取得 Set OraDynaset = Nothing |
●Nameプロパティ 【機能】指定フィールドのフィールド名を戻します。 【書式】result = OraDynaset.Fields(i).Name 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count 'フィールドの数を取得 For i = 0 To result - 1 'フィールド数分ループ Debug.Print OraDynaset.Fields(i).Name 'フィールド名の取得 Next Set OraDynaset = Nothing |
●OraIDataTypeプロパティ 【機能】指定フィールドのデータ型のコードを戻します。 【書式】result = OraDynaset.Fields(i).OraIDataType
【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count For i = 0 To result - 1 Debug.Print OraDynaset.Fields(i).OraIDataType 'データ型のコードの取得 Next Set OraDynaset = Nothing |
●OraMaxDSizeプロパティ 【機能】指定フィールドの最大表示サイズを戻します。 【書式】result = OraDynaset.Fields(i).OraMaxDSize 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count For i = 0 To result - 1 Debug.Print OraDynaset.Fields(i).OraMaxDSize '最大表示サイズの取得 Next Set OraDynaset = Nothing |
●OraPrecisionプロパティ 【機能】指定フィールドの数値列の精度を戻します。 【書式】result = OraDynaset.Fields(i).OraPrecision 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count For i = 0 To result - 1 Debug.Print OraDynaset.Fields(i).OraPrecision '数値列の精度の取得 Next Set OraDynaset = Nothing |
●OraScaleプロパティ 【機能】指定フィールドの数値列の位取りを戻します。 【書式】result = OraDynaset.Fields(i).OraScale 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count For i = 0 To result - 1 Debug.Print OraDynaset.Fields(i).OraScale '数値列の位取りの取得 Next Set OraDynaset = Nothing |
●OraNullOKプロパティ 【機能】この列でNULL値を使用できるかどうかを示します。 【書式】result = OraDynaset.Fields(i).OraNullOK 【 例 】 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) result = OraDynaset.Fields.Count For i = 0 To result - 1 Debug.Print OraDynaset.Fields(i).OraNullOK 'NULLを使用できるかどうかを取得 Next Set OraDynaset = Nothing |