Visual Basic6 リファレンス
|
VB6 オラクル oo4o 操作
Oracle データベースへの接続・操作についてのリファレンス。 |
Oracle Objects for OLEインプロセス・オートメーション・サーバー OO4Oインプロセス・オートメーション・サーバーは、Oracleデータベースへの接続、SQL文やPL/SQLブロックの実行、および結果へのアクセスのための一連のCOMオートメーション・オブジェクトです。 ※Oracleへ接続するためには ODAC(Instant Client)のインストールが必要です ODAC ダウンロード [参照設定] 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) ※ 上位バージョンは下位バージョンをサポートしていません。 [変数宣言] Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim 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 |
お品書き |
サンプル プログラム | |
● サンプル (SELECT) | oo4oにてDBに接続して、SELECT文を実行後、データを抽出して、DBを切断する サンプル プログラム |
● サンプル (INSERT,UPDATE,DELETE) | oo4oにてDBに接続して、UPDATE文を実行後、DBを切断する サンプル プログラム |
OraSession | Oracleデータベースへの接続を確立するためのインタフェースを提供します。 |
● OpenDatabase | データベースへ接続する |
● BeginTrans | トランザクションを開始する |
● CommitTrans | トランザクションをコミットする |
● Rollback | トランザクションをロールバックする |
● LastServerErr | エラーコードの取得 |
● LastServerErrText | エラーメッセージの取得 |
● LastServerErrReset | エラーのクリア |
OraDatabase | SQL文とPL/SQLコードを実行するためのメソッドを提供します。 |
● CreateDynaset | OraDynasetオブジェクトを作成 |
● ExecuteSQL | SELECT以外のSQL文を実行する |
● Close | クローズする? |
● LastServerErr | エラーコードの取得 |
● LastServerErrText | エラーメッセージの取得 |
● LastServerErrReset | エラーのクリア |
OraDynaset | SELECT問合せの結果を表します。 |
● RecordCount | レコードの総数の取得 |
● BOF | カレントレコードが最初のレコードの前にあるかどうか |
● EOF | カレントレコードが最後のレコードの後にあるかどうか |
● MoveFirst | カーソル位置を最初の行に移動する |
● MoveLast | カーソル位置を最後の行に移動する |
● MoveNext | カーソル位置を次の行に移動する |
● MovePrevious | カーソル位置を前の行に移動する |
OraFields、OraField | ダイナセットの行の中にある1つの列またはデータ項目を表します。 |
● Value | フィールドの値を取得 |
● Count | レコードのフィールド数の取得 |
● Name | フィールドのフィールド名の取得 |
● OraIDataType | フィールドのデータ型の取得 |
● OraMaxDSize | フィールドの最大表示サイズの取得 |
● OraPrecision | フィールドの数値列の精度の取得 |
● OraScale | フィールドの数値列の位取りの取得 |
● OraNullOK | フィールドはNULL値を使用できるかどうか |
● 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 strSQL Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'oo4oオブジェクト生成 Set OraDatabase = OraSession.OpenDatabase("hogetns", "hogeu/hogep", ORADB_DEFAULT) 'DB接続 strSQL = "SELECT * FROM HINMST WHERE MAKERCODE = '123'" 'SQL文 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行 MsgBox OraDynaset.RecordCount & "件のレコードを抽出しました" While Not OraDynaset.EOF 'レコード数分ループ Debug.Print 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 |
● 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 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'oo4oオブジェクト生成 Set OraDatabase = OraSession.OpenDatabase("hogetns", "hogeu/hogep", ORADB_DEFAULT) 'DB接続 OraSession.BeginTrans 'トランザクション開始 strSQL = "UPDATE HINMST SET ENDFLG = 1 WHERE MAKERCODE = '123'" 'SQL文 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 メソッド
|
● OraSession.BeginTrans メソッド
※ このメソッドのコール後、CommitTransが発行されるまで、データベース・トランザクションはコミットされません。 ※ Rollbackメソッドを使用すると、セッションをロールバックできます。 ※ BeginTransメソッドでトランザクションをすでに開始しているときに、BeginTransを再度使用するとエラーが発生します。 ※ BeginTrans発行後に、グローバル・トランザクション内のダイナセットの所定の行でUpdateまたはDeleteメソッドに失敗すると、UpdateまたはDeleteメソッドをコールした行がロックされたままになります。 CommitTransまたはRollbackメソッドをコールするまで、このロックは解除されません。 |
● OraSession.CommitTrans メソッド
|
● OraSession.Rollback メソッド
|
● OraSession.LastServerErr プロパティ ● OraDatabase.LastServerErr プロパティ
※ Oracle Call Interface(OCI)データベースファンクションから最後に戻された0(ゼロ)以外の戻り値を示します。最後のLastServerErrReset要求以降にエラーが発生していない場合は0(ゼロ)を示します。 効率を上げるために、0(ゼロ)以外の戻り値のみを戻します。したがって、0(ゼロ)以外の値が戻されても、そのエラー生成が、一番最後にコールされたOCIデータベースファンクションによるものとはかぎりません。 |
● OraSession.LastServerErrText プロパティ ● OraDatabase.LastServerErrText プロパティ
|
● OraSession.LastServerErrReset メソッド ● OraDatabase.LastServerErrReset メソッド
|
● OraDatabase.CreateDynaset メソッド
※ 単純なビューやシノニムなどの機能を自由に使用できます。 スキーマの参照、列の別名、表の結合、ネストされたSELECT文、およびリモート・データベースの参照機能も使用できます。ただし、どの場合もダイナセットは読取り専用です。 ※ Updateメソッドを実行すると、データベースに対するコミット操作がデフォルトで生成されます。 これを回避するには、CreateDynasetメソッドの使用前に、セッション・オブジェクトにBeginTransメソッドを使用します。 |
● OraDatabase.ExecuteSQL メソッド
※ SQL文を実行すると、データベースに対するコミットがデフォルトで生成されます。 これを回避するには、ExecuteSQLメソッドの使用前に、セッション・オブジェクトにBeginTransメソッドを使用します。 ※ 実行するSQL文またはPL/SQLブロックが、現在オープンしているダイナセットに悪影響を与える可能性があるため、不確実な場合は、異なるOraDatabaseオブジェクトを使用してください。 |
● OraDatabase.Close メソッド
|
● OraDynaset.RecordCount プロパティ
※ CreateDynasetメソッドのORADYN_NOCACHEオプションを使用して、このプロパティを参照すると、暗黙的なMoveLast操作が発生し、カレント・レコードがダイナセットの最終レコードになります。 |
● OraDynaset.BOF プロパティ ● OraDynaset.EOF プロパティ
※ レコードセットが空の場合、BOFとEOFは両方ともTRUEを戻します。 ※ BOFプロパティは、MovePreviousメソッドを使用してダイナセットの最初のレコードより前に移動しようとした場合にTRUEを戻します。 ※ EOFプロパティは、MoveNextメソッドを使用してダイナセットの最後のレコードより後に移動しようとした場合にTRUEを戻します。 |
● OraDynaset.MoveFirst メソッド ● OraDynaset.MoveLastメソッド ● OraDynaset.MoveNextメソッド ● OraDynaset.MovePreviousメソッド
※ 最初のレコードがカレント・レコードの場合にMovePreviousメソッドを使用すると、カレント・レコードがなくなり、BOFがTRUEになります。 MovePreviousメソッドを再度使用するとエラーが発生します。ただし、BOFはTRUEのままです。 ※ 最後のレコードがカレント・レコードの場合にMoveNextメソッドを使用すると、カレント・レコードがなくなり、EOFがTRUEになります。 MoveNextメソッドを再度使用するとエラーが発生します。ただし、EOFはTRUEのままです。 |
● Value プロパティ
|
● Count プロパティ
|
● Name プロパティ
|
● OraIDataType プロパティ
|
● OraMaxDSize プロパティ
※ 戻り値が文字列の場合にのみ意味があります。 |
● OraPrecision プロパティ
※ 戻り値が数値の場合にのみ意味があります。 精度は、数値の桁数です。 |
● OraScale プロパティ
※ 戻り値が数値の場合にのみ意味があります。SQLのREAL、DOUBLE PRECISION、FLOATおよびFLOAT(N)型では、-127の位取りが戻ります。 |
● OraNullOK プロパティ
※ NULL値を使用できる場合はTRUE、それ以外の場合はFALSEを戻します。 |