この章では、Oracle Objects for OLEのサーバー・メソッドについて説明します。
OO4Oサーバー・オブジェクトの概要は、「Oracle Objects for OLEインプロセス・オートメーション・サーバー」を参照してください。
内容は次のとおりです。
サーバー・メソッド: A〜B
サーバー・メソッド: C
サーバー・メソッド: D〜H
サーバー・メソッド: I〜L
サーバー・メソッド: M〜S
サーバー・メソッド: T〜Z
適用対象
説明
OraNumber
オブジェクトの絶対値を計算します。
使用方法
OraNumber.Abs
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraParameters
コレクションにパラメータを追加します。
使用方法
oraparameters.Add Name, Value, IOType, ServerType, ObjectName
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
Name |
パラメータ・コレクションに追加するパラメータの名前。この名前は、パラメータを識別するため、および関連するSQL文とPL/SQL文内のプレースホルダとして使用されます。 |
Value |
パラメータの初期値を指定するVariant 。初期値によってこのパラメータのデータ型が定義されるため、重要です。 |
IOType |
SQL文とPL/SQLブロック内でのパラメータの使用方法を指定する整数コード。 |
ServerType |
このパラメータがバインドされるOracle Databaseの型を指定します。BLOB 、CLOB 、BFILE 、OBJECT 、REF 、NESTED TABLE またはVARRAY へのバインド時に、この指定が必要です。指定できる値のリストは、「ServerTypeプロパティ」のOraParameter を参照してください。 |
ObjectName |
オブジェクト名を含む文字列。大/小文字が区別されます。 ServerType がORATYPE_OBJECT 、ORATYPE_VARRAY またはORATYPE_TABLE の場合にのみ、この指定が必要です。 ServerType は、PL/SQLでREF が使用される場合、ORATYPE_REF に必要です。 |
IOTypeの設定
IOType
の設定内容は、次のとおりです。
設定 | 値 | 説明 |
---|---|---|
ORAPARM_INPUT |
1 | 入力変数にのみ使用 |
ORAPARM_OUTPUT |
2 | 出力変数にのみ使用 |
ORAPARM_BOTH |
3 | 入力変数と出力変数の両方に使用 |
これらの値は、oraconst.txt
ファイルにあります。
ServerType
がVAR
、VARCHAR2
およびORATYPE_RAW_BIN
であるORAPARM_OUTPUT
変数の最大サイズは、デフォルトで128バイトに設定されます。この値を変更するには、MinimumSize
プロパティを使用します。 VAR
およびVARCHAR2
に対するORAPARM_OUTPUT
変数の最小サイズは、データベースの列から予測されるデータのサイズより常に大きい値に設定する必要があります。
この値が正しいことを確認してください。 パラメータのタイプがIN
であるストアド・プロシージャに対してORAPARM_BOTH
などの不正なオプションを指定すると、エラーとなる場合があります。 ORAPARM_BOTH
は、IN
OUT
パラメータに対してのみ使用されるものです。IN
パラメータが設定されているストアド・プロシージャとOUT
パラメータが設定されている別のストアド・プロシージャに対して使用されるものではありません。この場合は、2つのパラメータを使用する必要があります。このようなエラーが発生することはまれですが、パラメータに関するエラーの場合は、IOType
が正しいことを確認してください。
Value
引数には、OraBLOB
などのOracle Database 10gオブジェクトを使用できます。その時点でオブジェクトのコピーが作成されるので、パラメータの値を参照する新規オブジェクトを取得するためにValue
プロパティにアクセスする必要があることに注意してください。 たとえば、IOType
がORATYPE_BOTH
で、ダイナセットから取得したOraBLOB
が入力値として渡される場合、新たに更新されたパラメータの出力値を取得するためには、SQLが実行された後にパラメータのValue
プロパティに1回アクセスする必要があります。オブジェクトは、ダイナセットから取得する場合と同様の方法でパラメータから取得されます。
Value
プロパティは、常にパラメータの最新の値を参照します。Visual BasicのNULL
値を値として渡すこともできます。Visual BasicのEMPTY
値は、BLOB
およびCLOB
データ型に対しては空のLOBを意味する目的で、OBJECT
、VARRAY
およびNESTED
TABLE
データ型に対してはオブジェクトの属性がすべてNULL
であることを意味する目的で使用できます。
備考
パラメータを使用して、(SQL文を再構築するかわりに)SQLバインド変数を表します。SQLバインド変数は、問合せを再解析することなくパラメータ値を変更できるため便利です。SQLバインド変数は、入力変数としてのみ使用します。
パラメータを使用して、PL/SQLバインド変数を表すこともできます。PL/SQLのバインド変数は、入力と出力両方の変数として使用できます。
Oracle Raw
型の列にバインドする場合は、ServerType
値にORATYPE_RAW_BIN
を使用します。値のPut
またはGet
には、バイト配列を使用します。 ORATYPE_RAW_BIN
バインド・バッファの最大許容サイズは、表の列にバインドする場合は2000バイト、ストアド・プロシージャにバインドする場合は32KBです。 コード例は、ORACLE_BASE\ORACLE_HOME
\OO4O\VB\Raw
ディレクトリにあるサンプルを参照してください。
例
この例では、Add
およびRemove
パラメータ・メソッド、ServerType
パラメータ・プロパティ、(ORAEXAMP.SQL
にある)ストアド・プロシージャおよびファンクションをコールするExecuteSQL
データベース・メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Add EMPNO as an Input/Output parameter and set its initial value. OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT OraDatabase.Parameters("EMPNO").ServerType = ORATYPE_NUMBER 'Add ENAME as an Output parameter and set its initial value. OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT OraDatabase.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2 'Add SAL as an Output parameter and set its initial value. OraDatabase.Parameters.Add "SAL", 0, ORAPARM_OUTPUT OraDatabase.Parameters("SAL").ServerType = ORATYPE_NUMBER 'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME. ' This Stored Procedure can be found in the file ORAEXAMP.SQL. OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;") 'Display the employee number and name. 'Execute the Stored Function Employee.GetSal to retrieve SAL. ' This Stored Function can be found in the file ORAEXAMP.SQL. OraDatabase.ExecuteSQL ("declare SAL number(7,2); Begin" & _ ":SAL:=Employee.GetEmpSal (:EMPNO); end;") 'Display the employee name, number and salary. MsgBox "Employee " & OraDatabase.Parameters("ENAME").value & ", #" & _ OraDatabase.Parameters("EMPNO").value & ",Salary=" & _ OraDatabase.Parameters("SAL").value 'Remove the Parameters. OraDatabase.Parameters.Remove "EMPNO" OraDatabase.Parameters.Remove "ENAME" OraDatabase.Parameters.Remove "SAL" End Sub
適用対象
説明
OraIntervalDS
オブジェクトに引数を加算します。
使用方法
OraIntervalDS.Add operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
加算するVariant 型の文字列、数値またはOraIntervalDS オブジェクト。
|
備考
この操作の結果は、OraIntervalDS
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
operand
がVariant
型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。
operand
が数値の場合、提供される値は、構成されたOraIntervalDS
オブジェクトが表す合計日数を表す必要があります。
例
Dim oraIDS as OraIntervalDS 'Create an OraIntervalDS using a string which represents '1 day and 12 hours Set oraIDS = oo4oSession.CreateOraIntervalDS("1 12:0:0.0") 'Add an interval using a string, which represents 2 days 'and 12 hours, to oraIDS. 'The resulting oraIDS is an interval which represents 4 days oraIDS.Add "2 12:0:0.0"
適用対象
説明
OraIntervalYM
オブジェクトに引数を加算します。
使用方法
OraIntervalYMObj.Add operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
加算するVariant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
備考
この操作の結果は、OraIntervalYM
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
operand
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
operand
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
例
Dim oraIYM as OraIntervalYM 'Create an OraIntervalYM using a string which represents 1 year and 6 months Set oraIYM = oo4oSession.CreateOraIntervalYM("1-6") 'Add an interval using a string, which represents 2 years 'and 6 months, to oraIYM. 'The resulting oraIYM is an interval which represents 4 years oraIYM.Add "2-6"
適用対象
説明
OraNumber
オブジェクトに数値引数を追加します。
使用方法
OraNumber.Add operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber オブジェクトまたは数値。
|
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraSubscriptions
コレクションにサブスクリプションを追加します。
使用方法
orasubscriptions.Add Name, DbeventsHdl, Ctx
引数
このメソッドの引数は、次のとおりです。
変数 | 説明 |
---|---|
[in ] Name |
対象となるデータベース・イベント。このメソッドより前に、適切なイベント・トリガーおよびAQキューを設定する必要があります。
|
[in ] DbeventsHdl |
データベース・イベント・ハンドラ。対象のデータベース・イベントの起動時にコールされるNotifyDBEvents メソッドを実装するIDispatch インタフェースです。 |
[in ] Ctx |
NotifyDbEvents メソッドがコールされるときにアプリケーションが渡す必要があるコンテキスト固有の情報。 |
備考
データベース・イベントのサブスクリプションを登録するには、Add
メソッドのコール時に、対象のサブスクリプションを識別する名前と、イベントを処理するdbevent
ハンドラの名前を渡す必要があります。データベース・イベントのサポートに必要なキューおよびイベント・トリガーは、サブスクリプションの起動より前に設定してください。
dbevent
ハンドラは、NotifyDBEvents
メソッドを実装するオートメーション・オブジェクトであることが必要です。
NotifyDBEventsハンドラ
NotifyDBEvents
メソッドは、対象のデータベース・イベントが起動されたときに、Oracle Objects for OLEによってコールされます。
Oracle Databaseイベントに対するキューおよびトリガーの設定方法の詳細は、『Oracle Database概要』のシステム・イベントとユーザー・イベントのトリガーに関する説明を参照してください。
このメソッドの構文は、次のとおりです。
Public Function NotifyDBEvents(ByVal Ctx As Variant, ByVal Payload As Variant
変数
このメソッドの変数は、次のとおりです。
変数 | 説明 |
---|---|
[in] Ctx |
アプリケーションによってOraSubscriptions.Add メソッドに渡されます。アプリケーションがdbevent ハンドラに渡す必要があるコンテキスト依存の情報です。 |
[in] Payload |
この通知のペイロード。
イベント・トリガーおよびキューを設定することによって、データベース・イベントが起動します。この場合の |
例
例: データベース・イベントが通知されるようにアプリケーションを登録する方法
次の例では、アプリケーションが、データベース・ログイン・イベント(データベースへのすべてのログインなど)の通知をサブスクライブします。ユーザーがデータベースにログインすると、サブスクリプション時に渡されたDBEventsHdlr
のNotifyDBEvents
メソッドがコールされます。コンテキスト依存の情報およびイベント固有の情報がNotifyDBEvents
メソッドに渡されます。
この例のDBEventsHdlr
は、後で定義されるDBEventCls
です。
メイン・アプリケーション:
' First instantiate the dbevent handler. The dbevent notification ' will fire the NotifyDBEvents on the callback handler. Public DBEventsHdlr As New DBEventCls Private Sub Form_Load() Dim gOraSession As Object Dim gOraSubscriptions As OraSubscriptions Dim gOraDatabase As OraDatabase 'Create the OraSession Object Set gOraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set gOraDatabase = gOraSession.DbOpenDatabase ("ora90.us.oracle.com", "pubsub/pubsub", ORADB_ENLIST_FOR_CALLBACK) Set gOraSubscriptions = gOraDatabase.Subscriptions gOraSubscriptions.Add "PUBSUB.LOGON:ADMIN", DBEventsHdlr, gOraDatabase gOraSubscriptions(0).Register MsgBox "OK" End Sub
NotifyDBEvents
メソッドを定義するデータベース・イベント・ハンドラ・クラス。
Public countofMsgs as integer Public Function NotifyDBEvents(Ctx As Variant, Payload As Variant ) On error goto NotifyMeErr MsgBox "Retrieved payload " + Payload ' do something - here the subscription is unregistered after ' receiving 3 notifications countofMsgs = countofMsgs + 1 If countofMsgs > 3 Then Ctx.Subscriptions(0).UnRegister End If Exit Sub NotifyMeErr: Call RaiseError(MyUnhandledError, "newcallback:NotifyMe Method") End Sub
関連項目:
|
適用対象
説明
日数から秒数までの間隔を表す時間隔をOraTimeStamp
またはOraTimeStampTZ
オブジェクトに加算します。
使用方法
OraTimeStampObj.AddIntervalDS operand OraTimeStampTZObj.AddIntervalDS operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
現行のOraTimeStamp またはOraTimeStampTZ オブジェクトに加算する、日数から秒数までの間隔を表すVariant 型の文字列、数値またはOraIntervalDS オブジェクト。
|
備考
現行のOraTimeStamp
またはOraTimeStampTZ
オブジェクトに対する間隔の加算結果は、現行オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
operand
がVariant
型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。
operand
が数値の場合、提供される値は、構成されたOraIntervalDS
オブジェクトが表す合計日数を表す必要があります。
例
OraTimeStampの使用方法
Dim OraTimeStamp As OraTimeStamp ... 'Create OraTimeStamp using a string Set OraTimeStamp = OraSession.CreateOraTimeStamp("2000-12-28 00:00:00", _ "YYYY-MM-DD HH:MI:SS") 'Add an interval using numeric value that represents 5 days and 12 hours OraTimeStamp.AddIntervalDS 5.5 'Value should now be "2001-1-2 12:00:00" tsStr = OraTimeStamp.Value
OraTimeStampTZの使用方法
Dim OraTimeStampTZ As OraTimeStampTZ ... 'Create OraTimeStampTZ using a string Set OraTimeStamp = OraSession.CreateOraTimeStampTZ("2000-12-28 00:00:00 -07:00", _ "YYYY-MM-DD HH:MI:SS TZH:TZM") 'Add an interval using numeric value that represents 5 days and 12 hours OraTimeStampTZ.AddIntervalDS 5.5 'Value should now be "2001-1-2 12:00:00" tstzStr = OraTimeStampTZ.Value ...
適用対象
説明
年数から月数までの間隔を表す時間隔をOraTimeStamp
またはOraTimeStampTZ
オブジェクトに加算します。
使用方法
OraTimeStampObj.AddIntervalYM operand OraTimeStampTZObj.AddIntervalYM operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
現行のOraTimeStamp またはOraTimeStampTZ オブジェクトに加算する、年数から月数までの間隔を表すVariant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
備考
現行のOraTimeStamp
またはOraTimeStampTZ
オブジェクトに対する間隔の加算結果は、現行オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
operand
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
operand
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
例
例: OraTimeStampオブジェクトの使用方法
Dim OraTimeStamp As OraTimeStamp ... 'Create OraTimeStamp using a string Set OraTimeStamp = OraSession.CreateOraTimeStamp("2000-12-28 00:00:00", _ "YYYY-MM-DD HH:MI:SS") 'Add an interval using numeric value that represents 2 years OraTimeStamp.AddIntervalYM 2 'Value should now be "2002-12-28 00:00:00" tsStr = OraTimeStamp.Value ...
例: OraTimeStampTZオブジェクトの使用方法
Dim OraTimeStampTZ As OraTimeStampTZ ... 'Create OraTimeStampTZ using a string Set OraTimeStampTZ =OraSession.CreateOraTimeStampTZ("2000-12-28 00:00:00" & _ "-07:00" "YYYY-MM-DD HH:MI:SS TZH:TZM") 'Add an interval using numeric value that represents 2 years OraTimeStampTZ.AddIntervalYM 2 'Value should now be "2002-12-28 00:00:00" tstzStr = OraTimeStampTZ.Value ...
適用対象
説明
コピー・バッファを消去し、指定したダイナセットおよび関連データベースへのレコード挿入操作を開始します。
使用方法
oradynaset.AddNew oradynaset.DbAddNew
備考
AddNew
操作が開始されるとき、ダイナセット内のフィールドの値はコピー・バッファ内に保持され、データベースの実際の内容には反映されません。
フィールドの値はOraField
オブジェクトを介して変更され、Update
操作によって、または新しい行を破棄するようなデータベース内での移動が発生したときにコミットされます。明示的に割り当てられなかったフィールド値は、NULL
に設定されるか、またはOracleのデフォルト・メカニズムによってデフォルトに設定できます。この設定は、OpenDatabase
メソッドのコール時に使用されたオプション・フラグの列のデフォルト設定モードによって決定されます。いずれの場合も、データベース表にあり、ダイナセットにないフィールドは、常にOracleのデフォルト・メカニズムによってデフォルトに設定されます。
レコードは、内部的には"INSERT
into
TABLE
(...)
VALUES
(...)"
SQL文を使用してAddNew
メソッドによって挿入され、表の最後に追加されます。
オブジェクト型、コレクション型およびREF
型の列を含んだ行を追加する場合は、これらの型の列値として有効なOraObject
、OraCollection
またはOraRef
インタフェース、あるいはNULL
値を設定してください。この列値は、CreateOraObject
メソッドによって戻されるオートメーション・オブジェクトを使用して設定することもできます。BLOB
、CLOB
またはBFILE
の列を含んだ行を追加する場合は、これらの型の列値として有効なOraBLOB
、OraCLOB
またはOraBFILE
インタフェース、NULL
、あるいはEmpty
を設定してください。BLOB
、CLOB
およびBFILE
型の列にEmpty
値を設定すると、データベースに空のLOB値が挿入されます。
注意: Edit 、AddNew またはDelete メソッドのコールでは、未処理のEdit またはAddNew メソッドのコールは処理前に取り消されます。Update メソッドを使用して保存されていない未処理の変更は、すべて取消処理中に失われます。 |
例
この例では、AddNew
およびUpdate
メソッドを使用して、ダイナセットに新規レコードを追加する方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", _ "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Begin an AddNew. OraDynaset.AddNew 'Set the field(column) values. OraDynaset.Fields("EMPNO").Value = "1000" OraDynaset.Fields("ENAME").Value = "WILSON" OraDynaset.Fields("JOB").Value = "SALESMAN" OraDynaset.Fields("MGR").Value = "7698" OraDynaset.Fields("HIREDATE").Value = "19-SEP-92" OraDynaset.Fields("SAL").Value = 2000 OraDynaset.Fields("COMM").Value = 500 OraDynaset.Fields("DEPTNO").Value = 30 'End the AddNew and Update the dynaset. OraDynaset.Update MsgBox "Added one new employee." End Sub
適用対象
説明
OraParameters
コレクションに配列パラメータを追加します。
使用方法
oraparamarray.AddTable Name, IOType, ServerType, ArraySize , ElementSize, ObjectName
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
Name |
パラメータ・コレクションに追加するパラメータの名前。この名前は、パラメータを識別するため、および関連するSQL文とPL/SQL文内のプレースホルダとして使用されます。 |
IOType |
SQL文とPL/SQLブロック内でのパラメータの使用方法を指定する整数コード。 |
ServerType |
この配列パラメータがバインドされるOracle Databaseの型を指定します。指定できる値のリストは、「ServerTypeプロパティ」のOraParameter を参照してください。 |
ArraySize |
パラメータの配列要素の数を指定します。このパラメータは、最大バッファ長を計算するために使用されます。 |
ElementSize [オプション] |
要素のサイズを定義します。文字および文字列型の表(配列)パラメータにのみ有効です。ElementSize の有効サイズは、VarType によって異なります。
|
ObjectName |
オブジェクト名を含む文字列。大/小文字が区別されます。 ServerType がORATYPE_OBJECT 、ORATYPE_VARRAY またはORATYPE_TABLE の場合にのみ、この指定が必要です。 これは、PL/SQLでREF が使用される場合、ORATYPE_REF に必要です。 |
IOTypeの設定
IOType
の設定内容は、次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORAPARM_INPUT |
1 | 入力変数にのみ使用 |
ORAPARM_OUTPUT |
2 | 出力変数にのみ使用 |
ORAPARM_BOTH |
3 | 入力変数と出力変数の両方に使用 |
この値が正しいことを確認してください。 パラメータのタイプがIN
であるストアド・プロシージャに対してORAPARM_BOTH
などの不正なオプションを指定すると、エラーとなる場合があります。 ORAPARM_BOTH
は、IN
OUT
パラメータに対してのみ使用されるものです。IN
パラメータが設定されているストアド・プロシージャとOUT
パラメータが設定されている別のストアド・プロシージャに対して使用されるものではありません。この場合は、2つのパラメータを使用する必要があります。このようなエラーが発生することはまれですが、パラメータに関するエラーの場合は、IOType
が正しいことを確認してください。
ServerType
有効な型は、ServerTypeプロパティを参照し、次の点に注意してください。
注意:
外部データ型のORATYPE_NUMBER
には、1
〜38
の桁精度を使用できます。
正の数の最大は、0.99999999999999999999
E
+
38
です。
正の数の最小は、0.1
E
-38
です。
負の数の最小は、-0.99999999999999999999
E
+
38
です。
負の数の最大は、0.1
E
-38
です。
ElementSize(オプション)
文字、文字列およびRAW型に有効です。ElementSize
の有効サイズは、VarType
によって異なります。このサイズは、個々の文字列またはRAW配列要素の長さを表します。有効範囲は、次のとおりです。
VarType | サイズ |
---|---|
ORATYPE_VARCHAR2 |
有効範囲は、1〜1999 |
ORATYPE_VARCHAR |
有効範囲は、1〜1999 |
ORATYPE_STRING |
有効範囲は、1〜1999 |
ORATYPE_CHAR |
有効範囲は、1〜255 |
ORATYPE_CHARZ |
有効範囲は、1〜255 |
ORATYPE_RAW_BIN |
有効範囲は、1〜4000(備考を参照) |
備考
SQL文を再構築するかわりに、パラメータを使用して、配列を挿入、更新および削除するためのSQLバインド変数を表します。SQLバインド変数は、問合せを再解析することなくパラメータ値を変更できるため便利です。SQLバインド変数は、入力変数としてのみ使用します。
パラメータを使用して、PL/SQLバインド(IN
/OUT
)変数を表すこともできます。PL/SQLのバインド変数は、入力と出力両方の変数として使用できます。
Oracle Raw
型の列にバインドする場合は、ServerType
値にORATYPE_RAW_BIN
を使用します。値のPut
またはGet
には、バイト配列を使用します。 ORATYPE_RAW_BIN
バインド・バッファの最大許容サイズは、表の列にバインドする場合は2000バイト、ストアド・プロシージャにバインドする場合は32KBです。どの要素(ElementSize
引数を参照)も、ストアド・プロシージャにバインドする場合で4000バイト、表の列にバインドする場合で2000バイトを超えることはできません。 コード例は、ORACLE_BASE\ORACLE_HOME
\OO4O\VB\Raw
ディレクトリにあるサンプルを参照してください。
例
「例: PL/SQLでOraParamArraysを使用する方法」を参照してください。
適用対象
説明
コレクションのサイズを1つ拡張し、コレクションの最後にVariant
型の値を追加します。
使用方法
OraCollection.Append element
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] element |
追加する値を表すVariant 。 |
備考
OraCollection
がObject
型またはREF
型のコレクションの場合、要素を示す引数は有効なOraObject
またはOraRef
を表します。
例
次の例では、Append
メソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。
例: OraCollectionオブジェクトに対するAppendメソッドの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim EnameList as OraCollection 'create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from department set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&) 'retrieve a Enames column from Department. 'Here Value property of OraField object returns EnameList OraCollection set EnameList = OraDynaset.Fields("Enames").Value 'Append an "Eric" to the collection. 'Before that row level lock should be obtained OraDynaset.Edit EnameList.Append "Eric" OraDynaset.Update
適用対象
説明
入力用OraLOBオブジェクトのLOBデータをこのインスタンスの内部LOB値に追加します。
使用方法
OraBlob.Append srcBlob OraClob.Append srcClob
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] srcLOB |
OraBLOB またはOraCLOB 型の有効なオブジェクト。 |
備考
入力用LOBのLOBデータを現行LOB値の最後に追加します。このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。
適用対象
説明
コピー・バッファ内のLONG
またはLONG
RAW
型のフィールドに文字列のデータを追加します。
使用方法
orafield.AppendChunk(string) orafield.DbAppendChunk(string)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
string |
指定したフィールドに追加するデータ。 |
備考
AppendChunk
メソッドでは、64KBを超えるデータ・フィールドを操作できます。
例
注意: この例はそのままでは実行できません。frmChunk という名前の定義済フォームが必要です。 |
この例では、AppendChunk
メソッドを使用して、データベース内のLONG
RAW
型の列にファイルを読み込む方法を示します。この例では、longraw
という列を含んだ表を示すOraDynaset
という有効なダイナセットが存在していると想定しています。このコードをfrmChunk
というフォームの定義セクションにコピーしてください。このプロシージャは、有効なfilename
を使用してコールしてください。
Sub AppendChunkExample (FName As String) 'Declare various variables. Dim NumChunks As Integer, RemChunkSize As Integer Dim TotalSize As Long, CurChunk As String Dim I As Integer, FNum As Integer, ChunkSize As Integer 'Set the size of each chunk. ChunkSize = 10240 frmChunk.MousePointer = HOURGLASS 'Begin an add operation. OraDynaset.AddNew 'Clear the LONGRAW field. OraDynaset.Fields("LONGRAW").Value = "" 'Get a free file number. FNum = FreeFile 'Open the file. Open FName For Binary As #FNum 'Get the total size of the file. TotalSize = LOF(FNum) 'Set number of chunks. NumChunks = TotalSize \ ChunkSize 'Set number of remaining bytes. RemChunkSize = TotalSize Mod ChunkSize 'Loop through the file. For I = 0 To NumChunks 'Calculate the new chunk size. If I = NumChunks Then ChunkSize = RemChunkSize End If CurChunk = String$(ChunkSize, 32) 'Read a chunk from the file. Get #FNum, , CurChunk 'Append chunk to LONGRAW field. OraDynaset.Fields("LONGRAW").AppendChunk (CurChunk) Next I 'Complete the add operation and update the database. OraDynaset.Update 'Close the file. Close FNum frmChunk.MousePointer = DEFAULT End Sub
適用対象
説明
コピー・バッファ内のLONGまたはLONG
RAW
型のフィールドにバイト配列のデータを追加します。
使用方法
orafield.AppendChunkByte(ByteArray, numbytes)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
Byte Array |
指定したフィールドに追加するデータ。 |
numbytes |
コピーするバイト数。 |
備考
AppendChunkByte
メソッドでは、64KBを超えるデータ・フィールドを操作できます。
例
注意: この例は、参照用の不完全なサンプル・コードです。このサンプル・コードに基づいたLONGRAW という完全なVisual Basicサンプルが、OO4Oサンプル・ディレクトリに用意されています。 |
このサンプル・コードでは、AppendChunkByte
メソッドを使用して、データベース内のLONG RAW
型の列にファイルを読み込む方法を示します。このコードでは、longraw
という列を含んだ表を示すOraDynaset
という有効なダイナセットが存在していると想定しています。
Sub AppendChunkByteExample (FName As String) 'Declare various variables. Dim NumChunks As Integer, RemChunkSize As Integer Dim TotalSize As Long, CurChunkByte() As Byte Dim I As Integer, FNum As Integer, ChunkSize As Integer 'Set the size of each chunk. ChunkSize = 10240 frmChunk.MousePointer = HOURGLASS 'Begin an add operation. OraDynaset.AddNew 'Clear the LONGRAW field. OraDynaset.Fields("LONGRAW").Value = "" 'Get a free file number. FNum = FreeFile 'Open the file. Open FName For Binary As #FNum 'Get the total size of the file. TotalSize = LOF(FNum) 'Set number of chunks. NumChunks = TotalSize \ ChunkSize 'Set number of remaining bytes. RemChunkSize = TotalSize Mod ChunkSize 'Loop through the file. For I = 0 To NumChunks 'Calculate the new chunk size. If I = NumChunks Then ChunkSize = RemChunkSize End If ReDim CurChunkByte(ChunkSize) 'Read a chunk from the file. Get #FNum, , CurChunkByte 'Append chunk to LONGRAW field. OraDynaset.Fields("LONGRAW").AppendChunkByte (CurChunkByte) Next I 'Complete the add operation and update the database. OraDynaset.Update 'Close the file. Close FNum frmChunk.MousePointer = DEFAULT End Sub
適用対象
説明
指定したコンシューマに対してOraAQAgent
のインスタンスを作成し、メッセージのOraAQAgent
リストに追加します。
使用方法
Set agent = qMsg.AQAgent(name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] name |
メッセージのコンシューマ名を表す30バイトまでの文字列。
|
[in ] [オプション] Address |
プロトコル固有の受信者アドレスを表す128バイトの文字列。 例: [schema. ]queue [@dblink ] |
備考
OraAQAgent
は、メッセージ受信者を表すオブジェクトで、複数のコンシューマを許可するキューに対してのみ有効です。キューのサブスクライバはデフォルトで受信者です。このオブジェクトを使用して、デフォルトのコンシューマを上書きします。
OraAQAgent
オブジェクトは、AQAgent
メソッドをコールすることによってインスタンス化できます。次に、例を示します。
Set agent = qMsg.AQAgent(consumer)
1つのメッセージがサポートできるエージェントの最大数は10です。
AQAgent
メソッドはOraAQAgent
オブジェクトのインスタンスを戻します。
注意: このリリースでAddress はサポートされません(今後、サポートする予定です)。 |
適用対象
説明
指定したオプションに対してOraAQMsg
を作成します。
使用方法
Set qMsg = Q.AQMsg(msgtype, typename, schema)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] msgtype |
RAW またはユーザー定義型を示す整数。
RAW 型に対してはオプションです。次の値を指定できます。
|
[in ] typename |
型名を示す文字列。
RAW 型に対してはオプションです。デフォルトは'RAW' です。 |
[in ] [オプション] schema |
型が定義されたスキーマを表す文字列。 デフォルトは'SYS' です。 |
備考
このメソッドは次のように使用できます。
set QMsg = Q.AQMsg(ORATYPE_OBJECT,"MESSAGE_TYPE","SCOTT") set QMsg = Q.AQMsg
適用対象
説明
OraNumber
オブジェクトのアーク・コサインを計算します。結果はラジアンになります。
使用方法
OraNumber.ArcCos
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
OraNumber
の値が-1
未満または1
を超える場合、このメソッドはエラーを戻します。
適用対象
説明
OraNumber
オブジェクトのアーク・サインを計算します。結果はラジアンになります。
使用方法
OraNumber.ArcSin
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
OraNumber
オブジェクトが-1
未満または1
を超える場合、このメソッドはエラーを戻します。
適用対象
説明
OraNumber
オブジェクトのアーク・タンジェントを計算します。結果はラジアンになります。
使用方法
OraNumber.ArcTan
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
指定されたoperand
を使用して、2つの数のアーク・タンジェントを計算します。結果はラジアンになります。
使用方法
OraNumber.ArcTan2 operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber または数値 。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
operand
が0(ゼロ)の場合、このメソッドはエラーを戻します。
適用対象
説明
指定したindex
のOraMDAttribute
オブジェクトを戻します。
使用方法
Set OraMDAttribute = OraMetaData.Attribute(2) Set OraMDAttribute = OraMetaData.Attribute("AttributeName")
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] index |
0 〜count-1 の範囲にある整数の索引、または属性の名前を表す文字列。
|
備考
なし
適用対象
説明
パラメータのAutoBind
状態をリセットします。
使用方法
oraparameter.AutoBindDisable
備考
パラメータがAutoBindDisabled
状態の場合、SQLまたはPL/SQL文には自動的にバインドされません。
例
この例では、異なるパラメータを使用する各種ダイナセットの作成時に、AutoBindDisable
およびAutoBindEnable
メソッドを使用して不要なパラメータをバインドしないようにする方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession. OpenDatabase("ExampleDb", _ "scott/tiger", 0&) 'Add the job input parameter with initial value MANAGER. OraDatabase.Parameters.Add "job", "MANAGER", 1 'Add the deptno input parameter with initial value 10. OraDatabase.Parameters.Add "deptno", 10, 1 'Disable the deptno parameter for now. OraDatabase.Parameters("deptno").AutoBindDisable 'Create the OraDynaset Object using the job parameter. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _ "where job = :job", 0&) 'Only employees with job=MANAGER will be contained in the dynaset. MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _ "Job=" & OraDynaset.Fields("job").value 'Enable the deptno parameter and disable the job parameter. OraDatabase.Parameters("deptno").AutoBindEnable OraDatabase.Parameters("job").AutoBindDisable 'Create the OraDynaset Object using the deptno parameter. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _ "where deptno = :deptno", 0&) 'Only employees with deptno=10 will be contained in the dynaset. MsgBox "Employee #" & OraDynaset.Fields("empno").value & "," & _ "DeptNo=" & OraDynaset.Fields("deptno").value End Sub
適用対象
説明
パラメータのAutoBind
状態を設定します。
使用方法
oraparameter.AutoBindEnable
備考
パラメータがAutoBindEnabled
状態の場合、SQLまたはPL/SQL文に自動的にバインドされます。
例
この例では、異なるパラメータを使用する各種ダイナセットの作成時に、AutoBindDisable
およびAutoBindEnable
メソッドを使用して不要なパラメータをバインドしないようにする方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession. OpenDatabase("ExampleDb", _ "scott/tiger", 0&) 'Add the job input parameter with initial value MANAGER. OraDatabase.Parameters.Add "job", "MANAGER", 1 'Add the deptno input parameter with initial value 10. OraDatabase.Parameters.Add "deptno", 10, 1 'Disable the deptno parameter for now. OraDatabase.Parameters("deptno").AutoBindDisable 'Create the OraDynaset Object using the job parameter. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _ "where job = :job", 0&) 'Only employees with job=MANAGER will be contained in the dynaset. MsgBox "Employee #" & OraDynaset.Fields("empno").value & "," & _ "Job=" & OraDynaset.Fields("job").value 'Enable the deptno parameter and disable the job parameter. OraDatabase.Parameters("deptno").AutoBindEnable OraDatabase.Parameters("job").AutoBindDisable 'Create the OraDynaset Object using the deptno parameter. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _ "where deptno = :deptno", 0&) 'Only employees with deptno=10 will be contained in the dynaset. MsgBox "Employee #" & OraDynaset.Fields("empno").value & "," & _ "DeptNo=" & OraDynaset.Fields("deptno").value End Sub
適用対象
説明
指定したセッション内で、データベースのトランザクションを開始します。
使用方法
oraconnection.BeginTrans oradatabase.BeginTrans orasession.BeginTrans
備考
このメソッドのコール後、CommitTrans
が発行されるまで、データベース・トランザクションはコミットされません。Rollback
メソッドを使用すると、セッションをロールバックできます。BeginTrans
メソッドでトランザクションをすでに開始しているときに、BeginTrans
を再度使用するとエラーが発生します。
BeginTrans
発行後に、グローバル・トランザクション内のダイナセットの所定の行でUpdate
またはDelete
メソッドに失敗すると、Update
またはDelete
メソッドをコールした行がロックされたままになることに注意してください。 このロックは、CommitTrans
またはRollback
メソッドをコールするまで解除されません。
注意: OraDatabase オブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。 |
例
この例では、BeginTrans
メソッドを使用してダイナセットの一連の編集を1つのトランザクションにグループ化し、Rollback
を使用してその変更内容を取り消す方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim fld As OraField 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession. OpenDatabase("ExampleDb", _ "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Start Transaction processing. OraSession.BeginTrans 'Setup a field object to save object references. Set fld = OraDynaset.Fields("sal") 'Traverse until EOF is reached, setting each employees salary to zero Do Until OraDynaset.EOF = True OraDynaset.Edit fld.value = 0 OraDynaset.Update OraDynaset.MoveNext Loop MsgBox "All salaries set to ZERO." 'Currently, the changes have NOT been committed to the database. 'End Transaction processing. Using RollbackTrans 'means the rollback can be canceled in the Validate event. OraSession.Rollback 'MsgBox "Salary changes rolled back." End Sub
適用対象
ORASQL_NONBLK
オプションを使用して作成されたOraSQLStmtオブジェクト
説明
現在実行中のSQL操作を取り消します。
使用方法
status = OraSQL.NonBlockingState if status = ORASQL_STILL_EXECUTING OraSQL.CancelEndif
戻り値
ORASQL_SUCCESS(0)
: エラーは、例外として発生します。
適用対象
説明
データベースの参照可能オブジェクトのロックを解除し、オブジェクトの更新操作を取り消します。
使用方法
OraRef.CancelEdit
備考
このメソッドは注意して使用してください。このメソッドをコールすると、接続上の保留中のトランザクションもすべて取り消されます。
適用対象
説明
OraNumber
オブジェクトの上限値を計算します。
使用方法
OraNumber.Ceil
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
ユーザーのパスワードを変更します。
使用方法
OraServer.ChangePassword user_name, current_password, new_password
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] user_name |
パスワードを変更するユーザーを表す文字列。
|
[in ] current_password |
ユーザーの現在のパスワードを表す文字列。
|
[in ] new_password |
ユーザー・アカウントに新しく設定するパスワードを表す文字列。
|
備考
このメソッドを使用する前に、Open
メソッドを使用してOraServer
オブジェクトをOracleデータベースに接続する必要があります。
このメソッドは、パスワードの期限が切れた場合に有効です。期限が切れた場合、OpenDatabase
メソッドは次のエラーを戻す可能性があります。
ORA-28001「パスワードが期限切れです。」
関連項目: |
適用対象
説明
ユーザーのパスワードを変更します。
使用方法
OraSession.ChangePassword database_name, user_name, current_password, new_password
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] database_name |
データベースへの接続時に使用されるOracleネットワーク指定子を表す文字列。
|
[in ] user_name |
パスワードを変更するユーザーを表す文字列。
|
[in ] current_password |
ユーザーの現在のパスワードを表す文字列。
|
[in ] new_password |
ユーザー・アカウントに新しく設定するパスワードを表す文字列。
|
備考
このメソッドは、パスワードの期限が切れた場合に特に有効です。期限が切れた場合、OpenDatabase
またはCreateDatabasePool
メソッドは次のエラーを戻す可能性があります。
ORA-28001「パスワードが期限切れです。」
例
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim password as String 'Note: The DBA could expire scott's password by issuing 'ALTER USER SCOTT PASSWORD EXPIRE Set OraSession = CreateObject("OracleInProcServer.XOraSession") password = "tiger" On Error GoTo err: Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/" & password, 0&) End err: 'Check for password expiration error If OraSession.LastServerErr = 28001 Then OraSession.ChangePassword "ExampleDb", "scott", password, "newpass" 'reset our password variable, then try OpenDatabase again password = "newpass" Resume End If End
適用対象
説明
指定したダイナセットの複製ダイナセットを戻します。
使用方法
Set oradynaset2 = oradynaset1.Clone Set oradynaset2 = oradynaset1.DbClone
備考
このメソッドは、指定したダイナセットの複製ダイナセットを作成します。元のダイナセットと複製ダイナセットには、それぞれ独自のカレント・レコードがあります。ただし、新規ダイナセットでは現在の行が設定されず、EOF
とBOF
条件は両方ともTRUE
に設定されます。これを変更するには、Move
またはFind
メソッドを使用して、新規複製ダイナセットに現在の行を明示的に設定する必要があります。
Clone
メソッドの使用は、元のダイナセットに影響を与えません。クローンのダイナセットでは、レコードの追加、更新または削除はできません。
カレント・レコードを複数必要とするダイナセットで操作を実行するときはClone
メソッドを使用します。
クローンのダイナセットには、元のプロパティ設定がすべて反映されるとはかぎりません。CacheBlock
、CacheSliceSize
、CacheSlicePerBlock
およびFetchLimit
プロパティは、すべてNULL
に設定されます。
ダイナセットとそのクローンのブックマーク間には互換性があります。異なるCreateDynaset
メソッドを使用して作成されたダイナセットのブックマーク間には互換性がありません。
適用対象
説明
OraLOBまたはOraBFILE
オブジェクトのクローンを戻します。
使用方法
OraBlob1 = OraBlob.Clone OraClob1 = OraClob.Clone OraBfile = OraBfile.Clone
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] OraLOB |
OraBLOB 、OraCLOB またはOraBFILE 型の有効なオブジェクト。 |
備考
このメソッドは、OraBLOB
またはOraCLOB
オブジェクトのコピーを作成します。このコピーは、ダイナセットの移動操作またはOraSQLStmt
のRefresh
操作によって変更されることはありません。OraBLOB
またはOraCLOB
オブジェクトに対するLOBデータの変更は、クローンでは実行できません。
このメソッドは、Oracle BFILE
ロケータのコピーを作成し、そのコピーに関連付けられているOraBFILE
を戻します。OraBFILE
のコピーは、ダイナセットの移動操作またはOraSQLStmt
のリフレッシュ操作によって変更されることはありません。
適用対象
説明
OraCollection
オブジェクトのクローンを戻します。
使用方法
set OraCollection1 = OraCollection.Clone
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] oraCollection1 |
有効なOraCollection オブジェクト。 |
備考
このメソッドは、Oracleコレクションのコピーを作成し、そのコピーに関連付けられているOraCollection
オブジェクトを戻します。このOracleコレクションのコピーは、ダイナセットの移動操作またはOraSQLStmt
のRefresh
操作によって変更されることはありません。このメソッドが戻すOraCollection
オブジェクトを使用して、基礎となるOracleコレクションの要素値にアクセスすることはできますが、要素の値を変更する操作はできません。
適用対象
説明
OraIntervalDS
オブジェクトのコピーを戻します。
使用方法
Set OraIntervalDSObjClone = OraIntervalDSObj.Clone
備考
元のオブジェクトと同じ値の新規OraIntervalDS
オブジェクトを戻します。
適用対象
説明
OraIntervalYM
オブジェクトのコピーを戻します。
使用方法
Set OraIntervalYMObjClone = OraIntervalYMObj.Clone
備考
元のオブジェクトと同じ値の新規OraIntervalYM
オブジェクトを戻します。
適用対象
説明
OraNumber
オブジェクトのコピーを戻します。
使用方法
Set OraNumber2 = OraNumber.Clone
備考
元のオブジェクトと同じ値の新規OraNumber
オブジェクトを戻します。
適用対象
説明
OraObject
またはOraRef
オブジェクトのクローンを戻します。
使用方法
Set OraObjectClone = OraObject.CloneSet OraRefClone = OraRef.Clone
備考
このメソッドは、値インスタンスまたはREF
値のコピーを作成し、そのコピーに関連付けられているOraObject
またはOraRef
を戻します。このコピーは、ダイナセットの移動操作または
OraSQLStmt
のリフレッシュ操作によって変更されることはありません。このメソッドが戻すOraObject
オブジェクトは、基礎となる値インスタンスの属性値にアクセスすることはできますが、その属性値を変更する操作はできません。
例
サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。次の例については、「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。
例: OraObjectオブジェクトに対するCloneメソッド
次の例では、Clone
メソッドの使用方法を示します。
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim Address as OraObject Dim AddressClone as OraObject 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from person_tab set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab",0&) 'retrieve a address column from person_tab. Here Value property of OraField object 'returns Address OraObject set Address = OraDynaset.Fields("Addr").Value 'here Address OraObject points to Address value instance in the server 'for the first row msgbox Address.Street 'move to second row OraDynaset.MoveNext 'here Address OraObject points to Address value instance in the server 'for the second row msgbox Address.Street 'get the clone of Address object. This clone points to the copy of 'the value instance for second row set AddressClone = Address.Clone 'move to third row OraDynaset.MoveNext 'here Address OraObject points to Address value instance in the server 'for third row msgbox Address.Street 'here AddressClone OraObject points to copy of Address value instance ' in the server for second row msgbox AddressClone.Street
例: OraRefオブジェクトに対するCloneメソッド
次の例では、Clone
メソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim Person as OraRef Dim PersonClone as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from customers set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&) 'retrieve a aperson column from customers. 'Here Value property of OraField object 'returns Person OraRef set Person = OraDynaset.Fields("aperson").Value 'here Person OraRef points to Person Ref value in the server for the first row msgbox Person.Name 'move to second row OraDynaset.MoveNext 'here Person OraRef points to Person Ref value in the server for the second row msgbox Person.Name 'get the clone of Person object. 'This clone points to the copy of the Ref for second row set PersonClone = Person.Clone 'move to third row OraDynaset.MoveNext 'here Person OraRef points to Person Ref value 'in the server for the third row msgbox Person.Name 'here PersonClone OraRef points to Person Ref value 'in the server for the second row msgbox PersonClone.Name
適用対象
説明
OraTimeStamp
オブジェクトのコピーを戻します。
使用方法
Set OraTimeStampObj1 = OraTimeStampObj.Clone
備考
現行オブジェクトと同じ値の新規OraTimeStamp
オブジェクトを戻します。
適用対象
説明
OraTimeStampTZ
オブジェクトのコピーを戻します。
使用方法
Set OraTimeStampTZObj1 = OraTimeStampTZObj.Clone
備考
現行オブジェクトと同じ値の新規OraTimeStampTZ
オブジェクトを戻します。
適用対象
説明
このメソッドは何も実行しません。Visual Basicとの互換性を保つために追加されています。
備考
OraDatabase
オブジェクトとOraDynaset
オブジェクトは、いずれもこのメソッドをサポートしません。OraDatabase
またはOraDynaset
オブジェクトが有効範囲を超えると、参照する対象がなくなり、オブジェクトは自動的にクローズします。
適用対象
説明
オープンしているBFILE
データ型をクローズします。
使用方法
OraBfile = OraBfile.Close
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] OraBfile |
OraBFILE 型の有効なオブジェクト。 |
備考
このメソッドは、BFILE
にのみ適用されます。LOBには適用できません。
適用対象
説明
このメソッドは、この接続上でオープンしているすべてのOraBFILE
オブジェクトをクローズします。
使用方法
OraBfile.CloseAll
適用対象
説明
現在のトランザクションを終了し、保留中の変更をすべてデータベースにコミットします。
使用方法
oraconnection.CommitTrans oradatabase.CommitTrans orasession.CommitTrans
備考
これらのオブジェクトに対するCommitTrans
メソッドの動作は、次のように異なります。
OraConnection
およびOraDatabase
CommitTrans
メソッドは、指定した接続に対して保留中の全トランザクションをコミットします。トランザクションが開始されていない場合、このメソッドは無効です。セッション全体のトランザクションが進行中の場合は、指定された接続用のトランザクションを早い時点でコミットするために、このメソッドを使用できます。
OraSession
CommitTrans
メソッドは、セッション内に存在する全トランザクションをコミットします。CommitTrans
メソッドは、トランザクションが開始されている場合のみ有効です。トランザクションが開始されていないときに、CommitTrans
を使用するとエラーが発生します。
注意: OraDatabase
オブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。
例
この例では、BeginTrans
メソッドを使用して、ダイナセットに対する一連の編集を1つのトランザクションにグループ化する方法を示します。次に、CommitTrans
メソッドを使用して変更を受け入れる方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim fld As OraField 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession. OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Start Transaction processing. OraSession.BeginTrans 'Setup a field object to save object references. Set fld = OraDynaset.Fields("sal") 'Traverse until EOF is reached, setting each employees salary to zero. Do Until OraDynaset.EOF = True OraDynaset.Edit fld.value = 0 OraDynaset.Update OraDynaset.MoveNext Loop MsgBox "All salaries set to ZERO." 'Currently, the changes have NOT been committed 'to the database. 'End Transaction processing. Commit the changes to the database OraSession.CommitTrans MsgBox "Salary changes committed." End Sub
適用対象
説明
OraBLOB
またはOraCLOB
(またはOraBFILE
)オブジェクトのLOB値の指定した部分を、OraBLOB
またはOraCLOB
(またはOraBFILE
)入力オブジェクトのLOB値と比較します。
使用方法
IsEqual = OraBlob.Compare srcBlob, amount, Offset, srcOffset IsEqual = OraClob.Compare srcClob, amount, Offset, srcOffset IsEqual = OraBfile.Compare srcBfile, amount, Offset, srcOffset
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] srcLOB |
値を比較するOraBLOB 、OraCLOB またはOraBFILE 入力オブジェクト。 |
[in ] [オプション] amount |
比較するバイト数または文字数を指定する整数。
amount のデフォルト値は、Offset から各LOBの最後までの値です。 |
[in ] [オプション] Offset |
このオブジェクトの値に(1 を基準とする)オフセットのバイト数(OraBLOB またはOraBFILE )または文字数(OraCLOB )を指定するための整数。
デフォルト値は1 です。 |
[in ] [オプション] srcOffset |
srcLob オブジェクトの値に(1 を基準とする)オフセットのバイト数(OraBLOB またはOraBFILE )または文字数(OraCLOB )を指定するための整数。
デフォルト値は1 です。 |
[out ] IsEqual |
比較操作の結果を表すブール値。 |
備考
Compare
メソッドは、比較が正常に終了するとTRUE
を戻します。それ以外の場合はFALSE
を戻します。
比較するバイト数または文字数が原因で、LOBの一方がその最後を超えて(他方のLOBは超えていない)比較された場合、その比較は失敗となります。この比較では、指定したOffset
から最後までのデータ量が両方のLOBで厳密に同じ場合にのみ成功となります。
このコールは現在、DBMS_LOB.INSTR()
を利用するPL/SQLブロックを実行することによって実装されています。
適用対象
説明
指定したセッションのOraClient
オブジェクトに関連付けられている、指定した名前のOraSession
オブジェクトを戻します。
使用方法
Set orasession2 = orasession1.ConnectSession(session_name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
session_name |
セッション名を指定する文字列。
|
備考
このメソッドは簡素化の目的で提供されています。現在のセッションのOraClient
オブジェクトにあるOraSessions
コレクション全体をスキャンして、session_name
というセッションを検索する処理に相当します。OraSessions
コレクションには、現在のアプリケーションが作成したセッションのみが含まれます。これは、セッションは、複数のアプリケーションでは共有できず、同一のアプリケーション内でのみ共有できることを意味します。
例
この例では、ConnectSession
およびCreateNamedSession
を使用して、以前に作成されたが保存されていないセッションをアプリケーションで使用する方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim dfltsess As OraSession Dim OraSession As OraSession 'Create the default OraSession Object. Set dfltsess = CreateObject("OracleInProcServer.XOraSession") 'Try to connect to "ExampleSession". If it does not exist 'an error is generated. On Error GoTo SetName Set OraSession = dfltsess.ConnectSession("ExampleSession") On Error GoTo 0 'You can specify other processing here, such as creating a ' database and/or dynaset. Exit Sub SetName: 'The session named "ExampleSession" was not found, so create it. Set OraSession = dfltsess.Client.CreateSession("ExampleSession") Resume Next End Sub
適用対象
説明
ダイナセットの行をクリップボードにテキスト形式でコピーします。
使用方法
OraDynaset.CopyToClipboard(NumOfRows, colsep, rowsep)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
NumOfRows |
ダイナセットからコピーする行数。 |
colsep [オプション] |
列と列の間に挿入する列セパレータ(CHAR データ型)。 |
rowsep [オプション] |
行と行の間に挿入する行セパレータ(CHAR データ型)。 |
備考
このメソッドを使用すると、Oracle Objects for OLEのキャッシュ(ダイナセット)とWindowsアプリケーション(ExcelやWordなど)間のデータ転送を簡単に実行できます。CopyToClipboard
メソッドは、ダイナセットの現在位置から最終行までのデータをコピーします。
デフォルトの列セパレータは、タブ(ASCII 9)です。
デフォルトの行セパレータは、キャリッジ・リターン(ASCII 13)です。
例
次の例では、ダイナセットのデータをクリップボードにコピーします。このコードをフォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Now call CopyToClipboard to copy the entire dynaset OraDynaset.CopyToClipboard -1, chr(9), chr(13) End Sub
適用対象
説明
OraBLOB
またはOraCLOB
入力オブジェクトの内部LOB値の一部を、このインスタンスの内部LOB値にコピーします。
使用方法
OraBlob.Copy srcBlob, amount, destOffset, srcOffset OraClob.Copy srcClob, amount, destOffset, srcOffset
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] srcLOB |
コピー元のOraCLob またはOraBLOB オブジェクト。 |
[in ] [オプション] amount |
コピーするバイト数または文字数を指定する整数。 デフォルト値は、srcLOB オブジェクトのBLOB またはCLOB 値のサイズです。 |
[in ] [オプション] destOffset |
このオブジェクトの値にオフセットのバイト数または文字数を指定するための整数。 デフォルト値は1 です。 |
[in ] [オプション] srcOffset |
srcLOB オブジェクトの値にオフセットのバイト数または文字数を指定するための整数。 デフォルト値は1 です。 |
備考
このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。
適用対象
説明
ローカル・ファイルの一部またはすべてをこのオブジェクトの内部LOB値にロードまたはコピーします。
使用方法
OraBlob.CopyFromFile "blob.bmp" amount, offset, chunksize OraClob.CopyFromFile "clob.txt" amount, offset, chunksize
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] filename |
読み取るファイルの絶対パスとファイル名を指定する文字列。 |
[in ] [オプション] amount |
コピーする最大バイト数を指定するための整数。 デフォルト値は、総ファイル・サイズです。 |
[in ] [オプション] offset |
このオブジェクトのBLOB またはCLOB 値の絶対オフセットを指定するための整数。OraBLOB またはOraBFILE の場合はバイト数、OraCLOB の場合は文字数を示します。 デフォルト値は1 です。 |
[in ] [オプション] chunksize |
各読込み操作に対するサイズをバイト数で指定するための整数。
chunksize パラメータが未指定または0 (ゼロ)の場合は、amount 引数の値が使用されます。つまり、1回でコピー・サイズ全体が転送されます。 |
備考
このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。
ファイルは、NLS_LANG
設定と同じ書式である必要があります。
注意: Write やCopyFromFile など、LOBのメソッドを使用したLOBの操作では、古いデータと比較して新しいデータが短い場合、LOBオブジェクトは自動的に切り捨てられません。LOBオブジェクトを新しいデータのサイズに縮小するには、Trim (OraLOB)メソッドを使用します。 |
例
例: CopyFromFileメソッドの使用方法
この例では、CopyFromFile
メソッドの使用方法を示します。
データベースにPART
表があり、その表に有効なLOBデータが含まれていることを確認してください。また、「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim PartImage as OraBLOB 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create a Dynaset containing a BLOB and a CLOB column set part = OraDatabase.CreateDynaset ("select * from part where" & _ "part_id = 1234",0) set PartImage = part.Fields("part_image").Value 'copy the entire content of partimage.jpg file to LOBS part.Edit PartImage.CopyFromFile "partimage.jpg" part.Update
適用対象
説明
OraBFILE
オブジェクトからLOB値の一部またはすべてをこのオブジェクトのLOB値にコピーします。
使用方法
OraBlob.CopyFromBFile srcBFile, amount, destOffset, srcOffset OraClob.CopyFromBFile srcBFile, amount, destOffset, srcOffset
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] srcBFile |
データのコピー元OraBFILE オブジェクト。 |
[in ] [オプション] amount |
コピーする最大数を指定する整数。OraCLOB の場合は文字数、OraBLOB またはOraBFILE の場合はバイト数を示します。 デフォルト値は、srcBFile オブジェクトのBFILE 値のサイズです。 |
[in ] [オプション] destOffset |
このインスタンスの絶対オフセットを指定するための整数。 デフォルト値は1 です。 |
[in ] [オプション] srcOffset |
コピー元OraBFILE オブジェクトのBFILE 値の絶対オフセットを指定するための整数。 デフォルト値は1 です。 |
備考
このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。
シングルバイト・キャラクタ・セットの場合、OraBFile
オブジェクトはデータベースと同じキャラクタ・セットである必要があります。
データベースで可変長キャラクタ・セットを使用している場合、OraClob.CopyFromBFile
メソッドに渡されるOraBFile
オブジェクトはUCS2キャラクタ・セットのファイルを指している必要があります。
適用対象
説明
このオブジェクトの内部LOB値の一部またはすべてをローカル・ファイルにコピーします。
使用方法
OraBlob.CopyToFile "blob.bmp" amount,offset,chunksize OraClob.CopyToFile "clob.txt" amount,offset,chunksize OraBfile.CopyToFile "bfile.bmp" amount,offset,chunksize
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] filename |
書込み先ファイルの絶対パスとファイル名を指定する文字列。
|
[in ] [オプション] amount |
コピーする最大数を指定する整数。OraBLOB /OraBFILE の場合はバイト数、OraCLOB の場合は文字数を示します。 デフォルト値は、LOBまたはBFILE のサイズです。 |
[in ] [オプション] offset |
このインスタンスのLOBまたはBFILE 値の絶対オフセットを指定するための整数。OraBLOB /OraBFILE の場合はバイト数、OraCLOB の場合は文字数を示します。 デフォルト値は1 です。 |
[in ] [オプション] chunksize |
各書込み操作に対するサイズをバイト数で指定するための整数。
chunksize パラメータが未指定または0 (ゼロ)の場合は、amount 引数の値が使用されます。つまり、1回でコピー・サイズ全体が転送されます。 |
備考
ファイルは、NLS_LANG
設定と同じ書式です。
ファイルがすでに存在している場合は、その内容が上書きされます。
例
例: CopyToFileメソッドの使用方法
この例では、CopyToFile
メソッドの使用方法を示します。
データベースにPART
表があり、その表に有効なLOBデータが含まれていることを確認してください。また、「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim PartDesc as OraCLOB 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0& 'Create a Dynaset containing a BLOB and a CLOB column set part = OraDatabase.CreateDynaset ("select * from part where" & _ "part_id = 1234",0) set PartDesc = part.Fields("part_desc").Value 'Copy the entire LOB content to partdesc.txt file PartDesc.CopyToFile "partdesc.txt"
適用対象
説明
ラジアンで指定されたOraNumber
オブジェクトのコサインを計算します。
使用方法
OraNumber.Cos
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraAQ
オブジェクトのインスタンスを作成します。
使用方法
Set OraAq = OraDatabase.CreateAQ(Qname)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] Qname |
データベース内のキュー名を表す文字列。
|
備考
なし
適用対象
説明
カスタム・キャッシュ・パラメータとフェッチ・パラメータを使用して、ダイナセットを作成します。
使用方法
Set oradynaset = oradatabase.CreateCustomDynaset(sql_statement, options, slicesize, perblock, blocks, FetchLimit, FetchSize, SnapShotID)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
sql_statement |
有効なOracle SQL SELECT 文。 |
slicesize |
キャッシュ・スライス・サイズ。 |
perblock |
ブロック当たりのキャッシュ・スライス。 |
blocks |
キャッシュのブロックの最大数。 |
FetchLimit |
フェッチ配列のサイズ。 |
FetchSize |
フェッチ配列のバッファ・サイズ。 |
options |
ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。 定数ORADYN_DEFAULT または値&H0& を指定すると、次のデフォルトがダイナセットに指定されます。
|
SnapShotID [オプション] |
OraDynaset のSnapShot プロパティから取得するスナップショットのID。 |
定数
次の表に、オプション・フラグの定数とその値を示します。
定数 | 値 | 説明 |
---|---|---|
ORADYN_DEFAULT |
&H0& |
デフォルトの動作を受け入れる。 |
ORADYN_NO_AUTOBIND |
&H1& |
データベース・パラメータの自動的なバインドを実行しない。 |
ORADYN_NO_BLANKSTRIP |
&H2& |
データベースから取り出された文字列データから、後続するブランクを削除しない。 |
ORADYN_READONLY |
&H4& |
ダイナセットを読取り専用にする。 |
ORADYN_NOCACHE |
&H8& |
ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの行を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。 |
ORADYN_ORAMODE |
&H10& |
データベースのOracleモードと同じように動作するが、作成中のダイナセットにのみ影響を与える。データベースがOracleモードで作成されている場合、ダイナセットは(互換性を保つために)そのプロパティを継承します。 |
ORADYN_NO_REFETCH |
&H20& |
データベースのORADB_NO_REFETCH モードと同じように動作するが、作成中のダイナセットにのみ影響を与える。 データベースがORADB_NO_REFETCH モードで作成されている場合、ダイナセットは互換性を保つためにそのプロパティを継承します。 |
ORADYN_N_MOVEFIRST |
&H40& |
ダイナセットの作成時にMoveFirst を強制的に実行しない。BOF とEOF は両方ともTRUEです。 |
ORADYN_DIRTY_WRITE |
&H80& |
Update およびDelete メソッドで、読取り一貫性をチェックしない。 |
これらの値は、次の位置にあるoraconst.txt
ファイルにあります。
ORACLE_BASE\ORACLE_HOME
\rdbms\oo4o
備考
SQL文は、SELECT
文であることが必要です。それ以外の場合はエラーが戻されます。単純なビューやシノニムなどの機能を自由に使用できます。スキーマの参照、列の別名、表の結合、ネストされたSELECT文、およびリモート・データベースの参照機能も使用できます。ただし、どの場合もダイナセットは読取り専用になります。
"sal + 100"
または"abs(sal)"
など、複雑な式またはSQLファンクションを列で使用すると、更新可能なダイナセットになりますが、複雑な式に関連付けられている列は更新できません。
通常、オブジェクト名は変更されませんが、特定の場合は変更できます。たとえば、列の別名を使用する場合は、フィールドを名前で参照する別名を使用する必要があります。また、複雑な式の中で空白を使用する場合、データベースで空白が削除されるため、列は空白を使用せずに参照する必要があります。フィールドは、常に番号で参照できます。つまり、SELECT
文の中の位置の順に従って参照できます。
SQL SELECT
文を実行すると、データベースに対するコミット操作がデフォルトで生成されます。これを回避するには、CreateDynaset
メソッドの使用前に、セッション・オブジェクトにBeginTrans
メソッドを使用します。
結果のダイナセットが更新可能であるかどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびオプション・フラグによって決まります。
更新可能性条件
ダイナセットを更新可能にするためには、次の3つの条件を満たす必要があります。
SQL文が、単純な列リストまたは列リスト全体を参照していること(*)
文でオプション引数の読取り専用フラグを設定しないこと
Oracleで、選択された問合せ行のROWID
参照が可能であること
SQL文はこれらの基準を満たしていない場合でも処理されますが、結果のダイナセットは更新不可になり、ダイナセットのUpdatable
プロパティはFALSE
を戻します。
このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。
SQLのバインド変数は、OraParameters
コレクションと組み合せて使用できます。
例
この例では、CreateCustomDynaset
メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object using sliceSize as 256,perblock size as 16, no. of 'blocks as 20, fetchLimit as 20,FetchSize as 4096 Set OraDynaset = OraDatabase.CreateCustomDynaset("select empno, " & _ "ename from emp", 0&,256,16,20,20,4096) 'Display the first record. MsgBox "Employee " & OraDynaset.Fields("empno").value & ", #" & _ OraDynaset.Fields("ename").value End Sub
適用対象
説明
OraDatabase
オブジェクトのプールを作成します。プールは1つのOraSession
オブジェクトに1つのみ作成できます。
使用方法
CreateDatabasePool (long initialSize, long maxSize, long timeoutValue, BSTR database_name, BSTR connect_string, long options)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
initialSize |
プールの初期サイズ。 |
maxSize |
プールが拡大可能な最大サイズ。 |
timeoutValue |
プール内のOraDatabase オブジェクトが、指定したtimeoutValue 値の間アイドル状態の場合、そのオブジェクトが含まれるデータベース接続は切断されます。この接続は、プール内のアイテムが再利用されると再びオープンします。この値は秒単位です。 |
database_name |
データ・コントロールをデータベースに接続するときに使用するOracleネットワーク指定子。 |
connectString |
Oracleデータベースに接続するときに使用するユーザー名とパスワード。 |
options |
データベースのオプション・モードの設定に使用するビット・フラグ文字。 options = 0 の場合は、デフォルトのモード設定が適用されます。使用可能なモードは、「定数」を参照してください。 |
備考
Oracleデータベースへの接続を確立するには、OraSession
オブジェクトのOpenDatabase
メソッドが使用されます。このメソッドは、OraDatabase
オブジェクトへの参照を戻します。この参照はSQL文とPL/SQLブロックの実行に使用されます。OO4Oの接続プールは、OraDatabase
オブジェクトのプールです。このプールは、OraSession
インタフェースのCreateDatabasePool
メソッドをコールすることによって作成されます。
このコールでは、次の場合に例外が発生します。
プールがすでに存在する場合
Oracleデータベースへの接続時にエラーが発生した場合
引数に無効な値が渡されている場合(initialSize
> maxSize
など)
OraSession
オブジェクトのLastServerErr
プロパティには、Oracle Databaseのエラーが原因で発生した例外の特定原因を示すコードが含まれます。
次の接続エラーが戻される可能性があります。
ORA-28001「パスワードが期限切れです。」
ChangePassword
メソッドを使用すると、パスワードを変更できます。
適用対象
説明
指定したSQL SELECT
文とオプションから、OraDynaset
オブジェクトを作成します。
使用方法
Set oradynaset = oradatabase.CreateDynaset(sql_statement, options, SnapShotID) Set oradynaset = oradatabase.DbCreateDynaset(sql_statement, options, SnapShotID)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
sql_statement |
有効なOracle SQL SELECT 文を含んだ文字列。
|
options |
ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。 定数ORADYN_DEFAULT または値&H0& を指定すると、次のデフォルトがダイナセットに指定されます。
|
SnapShotID [オプション] |
OraDynaset オブジェクトのSnapShot プロパティから取得するスナップショットのID 。 |
定数
次の表に、オプション・フラグの定数とその値を示します。
定数 | 値 | 説明 |
---|---|---|
ORADYN_DEFAULT |
&H0& |
デフォルトの動作を受け入れる。 |
ORADYN_NO_AUTOBIND |
&H1& |
データベース・パラメータの自動的なバインドを実行しない。 |
ORADYN_NO_BLANKSTRIP |
&H2& |
データベースから取り出された文字列データから、後続するブランクを削除しない。 |
ORADYN_READONLY |
&H4& |
ダイナセットを読取り専用にする。 |
ORADYN_NOCACHE |
&H8& |
ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの行を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。 |
ORADYN_ORAMODE |
&H10& |
データベースのOracleモードと同じように動作するが、作成中のダイナセットにのみ影響を与える。データベースがOracleモードで作成されている場合、ダイナセットは(互換性を保つために)そのプロパティを継承します。 |
ORADYN_NO_REFETCH |
&H20& |
データベースのORADB_NO_REFETCH モードと同じように動作するが、作成中のダイナセットにのみ影響を与える。 データベースがORADB_NO_REFETCH モードで作成されている場合、ダイナセットは互換性を保つためにそのプロパティを継承します。 |
ORADYN_NO_MOVEFIRST |
&H40& |
ダイナセットの作成時にMoveFirst を強制的に実行しない。BOF とEOF は両方ともTRUEです。 |
ORADYN_DIRTY_WRITE |
&H80& |
Update およびDelete メソッドで、読取り一貫性をチェックしない。 |
これらの値は、oraconst.txt
ファイルにあります。
備考
単純なビューやシノニムなどの機能を自由に使用できます。スキーマの参照、列の別名、表の結合、ネストされたSELECT文、およびリモート・データベースの参照機能も使用できます。ただし、どの場合もダイナセットは読取り専用です。
"sal + 100"
または"abs(sal)"
など、複雑な式またはSQLファンクションを列で使用すると、更新可能なダイナセットになりますが、複雑な式に関連付けられている列は更新できません。
通常、オブジェクト名は変更されませんが、特定の場合は変更できます。たとえば、列の別名を使用する場合は、フィールドを名前で参照する別名を使用する必要があります。また、複雑な式の中で空白を使用する場合、データベースで空白が削除されるため、列は空白を使用せずに参照する必要があります。フィールドは、常に番号で参照できます。つまり、SELECT
文の中の位置の順に従って参照できます。
Update
メソッドを実行すると、データベースに対するコミット操作がデフォルトで生成されます。これを回避するには、CreateDynaset
メソッドの使用前に、セッション・オブジェクトにBeginTrans
メソッドを使用します。
結果のダイナセットが更新可能であるかどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびオプション・フラグによって決まります。ダイナセットを更新可能にするためには、次の条件を満たす必要があります。
SQL文が、単純な列リストまたは列リスト全体を参照していること(*)
文でオプション引数の読取り専用フラグを設定しないこと
Oracle Databaseで、選択された問合せ行のROWID
参照が可能であること
SQL文はこれらの基準を満たしていない場合でも処理されますが、結果のダイナセットは更新不可になり、ダイナセットのUpdatable
プロパティはFALSE
を戻します。このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。SQLのバインド変数は、OraParameters
コレクションと組み合せて使用できます。
SnapShotID
オプションを指定すると、作成したSQLStmt
オブジェクト用にスナップショット記述子が作成されます。このプロパティは、他のSQLStmt
またはOraDynaset
オブジェクトを作成するために、後で取得して使用できます。実行スナップショットによって、OraDatabase
オブジェクトの複数のコンテキストで実行される複数のコマンドが、データベースのコミット済データの同一スナップショットで操作できるようになります。
例
この例では、CreateObject
、OpenDatabase
およびCreateDynaset
メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&) 'Display the first record. MsgBox "Employee " & OraDynaset.Fields("empno").value & ", #" & _ OraDynaset.Fields("ename").value End Sub
適用対象
説明
コレクションの要素をスキャンするイテレータを作成します。
使用方法
OraCollection.CreateIterator
備考
このメソッドは、Oracleコレクションの要素をスキャンするイテレータを作成します。イテレータを使用してコレクション要素にアクセスする方が、コレクションのインスタンスで索引を使用するより高速です。
例
例: OraCollectionイテレータ
次の例では、Oracleコレクション・イテレータの使用方法を示します。
サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim CourseList As OraCollection Dim Course As OraObject 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", scott/tiger", 0&) 'Create a dynaset object from division Set OraDynaset = OraDatabase.CreateDynaset("select courses from" & _ "division where name='History'", 0&) 'Retrieve a Courses column from Division. Set CourseList = OraDynaset.Fields("Courses").Value 'Create the iterator CourseList.CreateIterator 'Initialize the iterator to point to the beginning of a collection CourseList.InitIterator 'Call IterNext to read CourseList until the end While CourseList.EOC = False Set Course = CourseList.ElementValue course_no = Course.course_no Title = Course.Title Credits = Course.Credits CourseList.IterNext Wend 'Call IterPrev to read CourseList until the beginning CourseList.IterPrev While CourseList.BOC = False Set Course = CourseList.ElementValue course_no = Course.course_no Title = Course.Title Credits = Course.Credits CourseList.IterPrev Wend
適用対象
説明
新しい名前付きOraSession
オブジェクトを作成し、戻します。
使用方法
orasession = orasession.CreateNamedSession(session_name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
session_name |
セッション名を指定する文字列。
|
備考
このメソッドを使用すると、参照先のセッション・オブジェクトが有効範囲内にあるかぎり、後で同じアプリケーションで参照できる名前付きセッションを作成できます。セッションが作成されると、ConnectSession
メソッドまたは各OraClient
オブジェクトのOraSessions
コレクションを介して、アプリケーションがそのセッションを参照できます。OraSessions
コレクションには、現在のアプリケーションが作成したセッションのみが含まれます。したがって、複数のアプリケーション間でセッションの共有はできません。同一のアプリケーション内でのみ共有できます。
このメソッドは簡素化の目的で提供されています。OraClient
オブジェクトのCreateSession
メソッドと同じです。
例
この例では、ConnectSession
およびCreateNamedSession
を使用して、以前に作成されたが保存されていないセッションをアプリケーションで使用する方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim dfltsess As OraSession Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the default OraSession Object. Set dfltsess = CreateObject("OracleInProcServer.XOraSession") 'Try to connect to "ExampleSession". If it does not exist 'an error is generated. On Error GoTo SetName Set OraSession = dfltsess.ConnectSession("ExampleSession") On Error GoTo 0 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Display or manipulate data here Exit Sub SetName: 'The session named "ExampleSession" was not found, so create it. Set OraSession = dfltsess.CreateNamedSession("ExampleSession") Resume Next End Sub
適用対象
説明
OraIntervalDS
オブジェクトを作成します。このOraIntervalDS
は、Oracle INTERVAL
DAY
TO
SECOND
データ型を表します。
使用方法
Set OraIntervalDSObj = OraSession.CreateOraIntervalDS value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、数値、OraIntervalDS またはOraNumber オブジェクト。
|
戻り値
備考
OraIntervalDS
オブジェクトの作成前に、OraSession
オブジェクトを作成する必要があります。
value
がVariant
型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalDS
が表す合計日数を表す必要があります。
Variant
型のOraIntervalDS
を渡すこともできます。クローンのOraIntervalDS
が戻されます。
例
Dim oraIDS as OraIntervalDS Dim oraIDS2 as OraIntervalDS Dim oraNum as OraNumber 'Create an OraIntervalDS using a string which represents 1 days, 2 hours, '3 minutes, 4 seconds and 500000 nanoseconds Set oraIDS = oo4oSession.CreateOraIntervalDS("1 2:3:4.005") 'Create an OraIntervalDS using a numeric value which represents '1 days and 12 hours Set oraIDS = oo4oSession.CreateOraIntervalDS(1.5) 'Create an OraIntervalDS using an OraIntervalDS Set oraIDS2 = oo4oSession.CreateOraIntervalDS(oraIDS)
適用対象
説明
OraIntervalYM
オブジェクトを作成します。このOraIntervalYM
は、Oracle INTERVAL
YEAR
TO
MONTH
データ型を表します。
使用方法
Set OraIntervalYMObj = OraSession.CreateOraIntervalYM value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
戻り値
備考
OraIntervalYM
オブジェクトの作成前に、OraSession
オブジェクトを作成する必要があります。
value
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
Variant
型のOraIntervalYM
を渡すこともできます。クローンのOraIntervalYM
オブジェクトが戻されます。
例
Dim oraIYM as OraIntervalYM Dim oraIYM2 as OraIntervalYM 'Create an OraIntervalYM using a string which represents 1 year and 2 months Set oraIYM = oo4oSession.CreateOraIntervalYM("1- 2") 'Create an OraIntervalYM using a numeric value which represents '1 year and 6 months Set oraIYM = oo4oSession.CreateOraIntervalYM(1.5) 'Create an OraIntervalYM using an OraIntervalYM Set oraIYM2 = oo4oSession.CreateOraIntervalYM(oraIYM)
適用対象
説明
OraNumber
オブジェクトを作成します。このOraNumber
は、Oracle NUMBER
データ型を表します。
使用方法
OraNumber = OraSession.CreateOraNumber(inital_value, format)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
initial_value |
OraNumber の初期値。Variant 型のOraNumber 、文字列または数値。 |
format [オプション] |
OraNumber 値を表示するときに使用する書式文字列。 |
戻り値
備考
書式文字列の詳細は、OraNumber
オブジェクトのformatプロパティを参照してください。
適用対象
説明
キャッシュに値インスタンス/参照可能オブジェクトを作成し、関連付けられているOO4Oオブジェクトを戻します。
使用方法
OraObject1 = OraDatabase.CreateOraObject(schema_name) OraRef1 = OraDatabase.CreateOraObject(schema_name,table_name) OraCollection1 = OraDatabase.CreateOraObject(schema_name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
OraObject1 |
新しく作成する値インスタンスを表す有効なOraObject オブジェクト。 |
OraRef1 |
新しく作成する参照可能オブジェクトを表す有効なOraRef オブジェクト。 |
OraCollection |
新しく作成するコレクション・インスタンスを表す有効なOraCollection オブジェクト。 |
schema_name |
作成する値インスタンスのスキーマ名を指定する文字列。
|
table_name |
作成する参照可能オブジェクトの表名を指定する文字列。
|
備考
table_name
引数を指定しないと、クライアントに値インスタンスが作成され、OraObject
またはOraCollection
オブジェクトが戻されます。 table_name
引数を指定すると、データベースに参照可能オブジェクトが作成され、関連付けられているOraRef
オブジェクトが戻されます。
例
OraObject
オブジェクトの例とOraRef
オブジェクトの例を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。
例: OraObjectオブジェクトの作成
次の例では、CreateOraObject
メソッドを使用して値インスタンスを挿入する方法を示します。ADDRESS
を含んだ行が値インスタンスとしてデータベースに挿入されます。
ダイナセットの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim AddressNew as OraObject 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", scott/tiger", 0&) 'create a dynaset object from person_tab set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab", 0&) ' create a new Address object in OO4O set AddressNew = OraDatabase.CreateOraObject("ADDRESS") 'initialize the Address object attribute to new value AddressNew.Street = "Oracle Parkway" AddressNew.State = "CA" 'start the dynaset AddNew operation and 'set the Address field to new address value OraDynaset.Addnew OraDynaset.Fields("ADDR").Value = AddressNew OraDynaset.Update
OraParameterの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim AddressNew as OraObject 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create an OraParameter object represent Address object bind Variable OraDatabase.Parameters.Add "ADDRESS", Null, ORAPARM_INPUT, _ ORATYPE_OBJECT, "ADDRESS" ' create a new Address object in OO4O set AddressNew = OraDatabase.CreateOraObject("ADDRESS") 'initialize the Address object attribute to new value AddressNew.Street = "Oracle Parkway" AddressNew.State = "CA" 'set the Address to ADDRESS parameter Oradatabase.Parameters("ADDRESS").Value = AddressNew 'execute the sql statement which updates Address in the person_tab OraDatabase.ExecuteSQL ("insert into person_tab values ('Eric',30,:ADDRESS)")
例: OraRefオブジェクトの作成
次の例では、CreateOraObject
メソッドを使用して参照可能オブジェクトを挿入する方法を示します。
この例では、新規PERSON
が参照可能オブジェクトとしてデータベースに挿入されます。
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim Person as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'CreteOraObject creates a new referenceable 'object in the PERSON_TAB object table and returns associated OraRef set Person = OraDatabase.CreateOraObject("PERSON","PERSON_TAB") 'modify the attributes of Person Person.Name = "Eric" Person.Age = 35 'Update method inserts modified referenceable object in the PERSON_TAB. Person.Update
適用対象
説明
新規OraTimeStamp
オブジェクトを作成します。このOraTimeStamp
メソッドは、Oracle TIMESTAMP
またはOracle TIMESTAMP
WITH
LOCAL
TIME
ZONE
データ型を表します。
使用方法
Set OraTimeStampObj = OraSession.CreateOraTimeStamp value format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、日付またはOraTimeStamp 。
|
[in ] [オプション] format |
OraTimeStamp オブジェクトを文字列として表示または解析するときに使用するTimeStamp 書式文字列。 書式を指定しない場合、TimeStamp 文字列は、セッションのTIMESTAMP 書式(NLS_TIMESTAMP_FORMAT 書式)を使用して解析されます。 |
戻り値
備考
OraTimeStamp
オブジェクトの作成前に、OraSession
オブジェクトを作成する必要があります。
value
がVariant
型の文字列の場合、文字列の書式は、format
引数で指定した日時書式と一致する必要があります。
format
を指定しない場合、文字列の書式は、セッションのTIMESTAMP
書式(NLS_TIMESTAMP_FORMAT
)と一致する必要があります。
format
を指定した場合は、その書式がOraTimeStamp
のFormat
プロパティに格納されます。指定しない場合は、セッションのTIMESTAMP
書式がOraTimeStamp
のFormat
プロパティに格納されます。
例
Dim oraTS as OraTimeStamp Dim oraTS1 as OraTimeStamp Dim date as Date 'Create an OraTimeStamp using a string assuming the session 'TIMESTAMP format is "DD-MON-RR HH.MI.SSXFF AM" Set oraTS = oo4oSession.CreateOraTimeStamp("12-JAN-2003 12.0.0.0 PM") 'Create an OraTimeStamp using a string and a format Set oraTS = oo4oSession.CreateOraTimeStamp("2003-01-12 12:00:00 PM", _ "YYYY-MM-DD HH:MI:SS AM") 'Create an OraTimeStamp using a Date date = #1/12/2003# Set oraTS = oo4oSession.CreateOraTimeStamp(date) 'Create an OraTimeStamp using an OraTimeStamp Set oraTS1 = oo4oSession.CreateOraTimeStamp(oraTS)
適用対象
説明
新規OraTimeStampTZ
オブジェクトを作成します。このOraTimeStampTZ
オブジェクトは、Oracle TIMESTAMP
WITH
TIME
ZONE
データ型を表します。
使用方法
Set OraTimeStampTZObj = OraSession.CreateOraTimeStampTZ value format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、日付またはOraTimeStampTZ 。
|
[in ] [オプション] format |
OraTimeStampTZ オブジェクトを文字列として表示または解析するときに使用するTIMESTAMP WITH TIME ZONE 書式文字列。 書式を指定しない場合、TIMESTAMP WITH TIME ZONE 文字列は、セッションのTIMESTAMP WITH TIME ZONE 書式(NLS_TIMESTAMP_TZ_FORMAT 書式)を使用して解析されます。 |
戻り値
備考
OraTimeStampTZ
オブジェクトの作成前に、OraSession
オブジェクトを作成する必要があります。
value
がVariant
型の文字列の場合、文字列の書式は、書式を指定した場合は書式引数で指定した日時書式と一致する必要があります。書式を指定しない場合はセッションのTIMESTAMP
WITH
TIME
ZONE
書式(NLS_TIMESTAMP_TZ_FORMAT
)と一致する必要があります。
value
がVariant
型の日付の場合、Date
の日時値は、セッションのタイムゾーンの日時値として解析されます。OraTimeStampTZ
オブジェクトのTimeZone
プロパティには、セッションのタイムゾーンが含まれます。
format
を指定した場合は、その書式がOraTimeStampTZ
オブジェクトのFormat
プロパティに格納されます。指定しない場合は、セッションのTIMESTAMP
WITH
TIME
ZONE
書式がOraTimeStampTZ
オブジェクトのFormat
プロパティに格納されます。
例
Dim oraTSZ as OraTimeStampTZ Dim oraTSZ1 as OraTimeStampTZ Dim date as Date 'Create an OraTimeStampTZ using a string assuming the session 'TIMESTAMP WITH TIME ZONE format is "DD-MON-RR HH.MI.SSXFF AM TZH:TZM" Set oraTSZ = oo4oSession.CreateOraTimeStampTZ( "12-JAN-2003" & _ "12.0.0.0 PM -03:00") 'Create an OraTimeStampTZ using a string and a format Set oraTSZ = oo4oSession.CreateOraTimeStampTZ( "2003-01-12" & _ "12:00:00 PM -03:00", "YYYY-MM-DD HH:MI:SS AM TZH:TZM") 'Create an OraTimeStampTZ using a Date date = #1/12/2003# Set oraTSZ = oo4oSession.CreateOraTimeStampTZ(date) 'Create an OraTimeStampTZ using an OraTimeStampTZ Set oraTSZ1 = oo4oSession.CreateOraTimeStampTZ(oraTSZ)
適用対象
使用不可になっています。
これらのタスクの実行方法については、「PL/SQLカーソル変数を戻す方法」を参照してください。
説明
カスタム・キャッシュ・パラメータとフェッチ・パラメータを使用して、PL/SQLカーソルからダイナセットを作成します。SQL文は、ストアド・プロシージャまたは無名ブロックである必要があります。作成されるダイナセットは読取り専用です。SQLプロパティを設定しようとすると、エラーになります。ダイナセットは、新しいパラメータを指定してリフレッシュできます。
使用方法
set OraDynaset = CreatePlsqlCustomDynaset(SQLStatement, CursorName, options, slicesize, perblock, blocks, FetchLimit, FetchSize)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
SQLStatement |
有効なOracle PL/SQLストアド・プロシージャまたは無名ブロック。 |
CursorName |
PL/SQLストアド・プロシージャで作成されるカーソルの名前。 |
options |
ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。 |
slicesize |
キャッシュ・スライス・サイズ。 |
perblock |
ブロック当たりのキャッシュ・スライス。 |
blocks |
キャッシュのブロックの最大数。 |
FetchLimit |
フェッチ配列のサイズ。 |
FetchSize |
フェッチ配列のバッファ・サイズ。 |
定数
オプション・フラグの値は、次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORADYN_DEFAULT |
&H0& |
デフォルトの動作を受け入れる。 |
ORADYN_NO_AUTOBIND |
&H1& |
データベース・パラメータの自動的なバインドを実行しない。 |
ORADYN_NO_BLANKSTRIP |
&H2& |
データベースから取り出された文字列データから、後続するブランクを削除しない。 |
ORADYN_NOCACHE |
&H8& |
ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの行を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。 |
ORADYN_NO_MOVEFIRST |
&H40& |
ダイナセットの作成時にMoveFirst を強制的に実行しない。BOF とEOF は両方ともTRUEです。 |
これらの値は、oraconst.txt
ファイルにあります。
備考
SQL文は、PL/SQLストアド・プロシージャであることが必要で、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN
とEND
を付ける必要があります。これ以外の場合は、エラーが戻ります。CursorName
引数は、ストアド・プロシージャまたはPL/SQLの無名ブロックの中で作成されたカーソル名と正確に一致している必要があります。一致していない場合は、エラーが戻ります。ストアド・プロシージャ内で作成されたカーソルは、有効なSQL SELECT
文を表す必要があります。
ストアド・プロシージャにより、出力パラメータとしてカーソルが戻される場合は、OraParameters
のAdd
メソッドを使用してPL/SQLカーソルの変数をバインドする必要はありません。この場合も、PL/SQLのバインド変数を、OraParameters
コレクションと組み合せて使用できます。
このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。
ORADYN_READONLY
、ORADYN_ORAMODE
、ORADYN_NO_REFETCH
、ORADYN_DIRTY_WRITE
の各オプションを指定しても、ダイナセットの作成には影響を与えません。
適用対象
使用不可になっています。
これらのタスクの実行方法については、「PL/SQLカーソル変数を戻す方法」を参照してください。
説明
PL/SQLカーソルからダイナセットを作成します。SQL文は、ストアド・プロシージャまたは無名ブロックである必要があります。作成されるダイナセットは読取り専用であり、SQLプロパティを設定しようとすると、エラーになります。カーソル以外のダイナセットと同様、新しいパラメータを指定してこのダイナセットをリフレッシュできます。
使用方法
set OraDynaset = CreatePLSQLDynaset(SQLStatement, CursorName, options)
引数
引数 | 説明 |
---|---|
SQLStatement |
有効なOracle PL/SQLストアド・プロシージャまたは無名ブロック。 |
CursorName |
PL/SQLストアド・プロシージャで作成されるカーソルの名前。 |
options |
ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。 |
定数
オプション・フラグの値は、次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORADYN_DEFAULT |
&H0& |
デフォルトの動作を受け入れる。 |
ORADYN_NO_BLANKSTRIP |
&H2& |
データベースから取り出された文字列データから、後続するブランクを削除しない。 |
ORADYN_NOCACHE |
&H8& |
ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの行を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。 |
ORADYN_NO_MOVEFIRST |
&H40& |
ダイナセットの作成時にMoveFirst 操作を強制的に実行しない。BOF とEOF は両方ともTRUEです。 |
これらの値は、oraconst.txt
ファイルにあります。
備考
SQL文は、PL/SQLストアド・プロシージャであることが必要で、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN
文とEND
文を付ける必要があります。これ以外の場合は、エラーが戻ります。CursorName
引数は、ストアド・プロシージャまたはPL/SQLの無名ブロックの中で作成されたカーソル名と正確に一致している必要があります。一致していない場合は、エラーが戻ります。ストアド・プロシージャ内で作成されたカーソルは、有効なSQL SELECT
文を表す必要があります。
ストアド・プロシージャにより、出力パラメータとしてカーソルが戻される場合は、OraParameters.Addメソッドを使用してPL/SQLカーソルの変数をバインドする必要はありません。この場合も、PL/SQLのバインド変数を、OraParameters
コレクションと組み合せて使用できます。
このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。
ORADYN_READONLY
、ORADYN_ORAMODE
、ORADYN_NO_REFETCH
またはORADYN_DIRTY_WRITE
の各オプションを指定しても、ダイナセットの作成には影響を与えません。
例
この例では、CreatePlsqlDynaset
メソッドとRefresh
メソッドでPL/SQLカーソルを使用する方法を示します。ここでは、異なる値のDEPTNO
パラメータに対するPL/SQLカーソルをダイナセットとして戻します。対応するストアド・プロシージャ(EMPCUR.SQL
にあります)がOracleデータベースで使用可能であることを確認します。このコードをフォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) ' Create the Deptno parameter OraDatabase.Parameters.Add "DEPTNO", 10, ORAPARM_INPUT OraDatabase.Parameters("DEPTNO").ServerType = ORATYPE_NUMBER ' Create OraDynaset based on "EmpCursor" created in stored procedure. Set OraDynaset = OraDatabase.CreatePLSQLDynaset("Begin Employee.GetEmpData" & _ "(:DEPTNO,:EmpCursor); end;", "EmpCursor", 0&) 'Should display KING MsgBox OraDynaset.Fields("ENAME").Value 'Should display 7839 MsgBox OraDynaset.Fields("EMPNO").Value ' Now set the deptno value to 20 OraDatabase.Parameters("DEPTNO").Value = 20 'Refresh the dynaset OraDynaset.Refresh 'Should display JONES MsgBox OraDynaset.Fields("ENAME").Value 'Should display 7566 MsgBox OraDynaset.Fields("EMPNO").Value 'Remove the parameter. OraDatabase.Parameters.Remove ("DEPTNO") End Sub
適用対象
説明
新しい名前付きOraSession
オブジェクトを作成します。
使用方法
orasession = oraclient.CreateSession(session_name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
session_name |
セッション名を指定する文字列。
|
備考
このメソッドを使用すると、作成時にOraSession
オブジェクトを明示的に保存しなくても、後で同じアプリケーションで参照できる名前付きセッションを作成できます。セッションが作成されると、ConnectSession
メソッドまたは各OraClient
オブジェクトのOraSessions
コレクションを介して、アプリケーションがそのセッションを参照できます。OraSessions
コレクションには、現在のアプリケーションが作成したセッションのみが含まれます。これは、セッションは、複数のアプリケーションでは共有できず、同一のアプリケーション内でのみ共有できることを意味します。
例
この例では、クライアント・オブジェクトのCreateSession
メソッドを使用して、セッション・オブジェクトを作成する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraClient As OraClient Dim OraSession As OraSession Dim NamedOraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Get the OraClient object. Set OraClient = OraSession.Client 'Create a named OraSession Object 'Alternatively, you could use the CreateNamedSession 'method of the OraSession Object. Set NamedOraSession = OraClient.CreateSession("ExampleSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = NamedOraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) End Sub
適用対象
説明
SQL文を実行し、指定したSQL文とオプションからOraSQLStmt
オブジェクトを作成します。
使用方法
Set orasqlstmt = oradatabase.CreateSQL(sql_statement, options)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
sql_statement |
有効なOracle SQL文。 |
options |
OraSQLStmt のオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。 |
定数
オプション・フラグの値は、次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORASQL_NO_AUTOBIND |
&H1& |
データベース・パラメータの自動的なバインドを実行しない。 |
ORASQL_FAILEXEC |
&H2& |
エラーを発生させ、SQL文オブジェクトを作成しない。 |
ORASQL_NONBLK |
&H4& |
SQLを非ブロック状態で実行する。 |
これらの値は、oraconst.txt
ファイルにあります。
備考
SQL文は、ブレークのない連続する1行として指定できます。行をブレークする必要がある場合は、改行(ASCII 10)を使用します。キャリッジ・リターン(ASCII 13)は、基礎となるOracle DatabaseファンクションがNULL終端文字として取り扱うため、使用しないでください。
PL/SQLのバインド変数は、OraParameters
と組み合せて使用できます。
SQL文を実行すると、データベースに対するコミットがデフォルトで生成されます。これを回避するには、CreateSQL
メソッドの使用前に、セッション・オブジェクトにBeginTrans
メソッドを使用します。
PL/SQLブロックの実行時またはストアド・プロシージャのコール時は、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN
文とEND
文を付ける必要があります。 これは、SQL*PlusおよびSQL*DBAのEXECUTE
コマンドと同じです。
ORASQL_FAILEXEC
オプションを使用すると、SQLstmt
オブジェクトの作成に失敗したとき(SQLstmt
オブジェクトのリフレッシュ時)に、エラーが発生します。SQLstmt
オブジェクトは作成されず、リフレッシュもできません。
注意: 実行するSQL文またはPL/SQLブロックは、後で、オープンしているダイナセットでEdit メソッドを使用したときにエラーを発生させる可能性があるため、CreateSQL の使用には注意が必要です。 |
データ型
String
例
この例では、パラメータ、CreateSQL
メソッド、Refresh
メソッド、およびOraSQLStmt
オブジェクトのSQLプロパティの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraSqlStmt As OraSQLStmt 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) OraDatabase.Parameters.Add "EMPNO", 7369, 1 OraDatabase.Parameters("EMPNO").ServerType = 2 'ORATYPE_NUMBER OraDatabase.Parameters.Add "ENAME", 0, 2 OraDatabase.Parameters("ENAME").ServerType = 1 'ORATYPE_VARCHAR2 Set OraSqlStmt = OraDatabase.CreateSQL("Begin Employee.GetEmpName" & _ "(:EMPNO, :ENAME); end;", 0&) 'Notice that the SQL statement is NOT modified. MsgBox OraSqlStmt.SQL 'Should display SMITH MsgBox OraDatabase.Parameters("ENAME").Value 'Change the value of the empno parameter. OraDatabase.Parameters("EMPNO").Value = 7499 'Refresh the sqlstmt OraSqlStmt.Refresh 'Should display ALLEN MsgBox OraDatabase.Parameters("ENAME").Value 'Notice that the SQL statement is NOT modified. MsgBox OraSqlStmt.SQL 'Remove the parameter. OraDatabase.Parameters.Remove ("job") End Sub
適用対象
説明
データベースに一時LOBを作成します。
使用方法
Set OraBLOB = OraDatabase.CreateTempBLOB(use_caching) Set OraCLOB = OraDatabase.CreateTempCLOB(use_caching)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
use_caching |
このLOBにアクセスする際にOracle Databaseでキャッシュを使用するかどうかを指定するブール値。デフォルト値はFALSE です。 |
備考
一時LOBは、データベースに永続的に存在しないLOBです。OO4Oのプログラミングでは一般的に、一時LOBを、LOB引数を含むストアド・プロシージャおよびファンクションへ渡すために使用します。
一時LOBは、トランザクションには関係ありません。(書込み操作の前に、ロックを取得する必要はありません。また、ロールバックは一時LOBには影響を与えません。)
use_caching
引数は、一時LOBにアクセスする際にOracleでキャッシュを使用するよう指定します。これは、1つのLOBに複数のアクセスが予想される場合に推奨します。LOBを作成してデータを格納し、ストアド・プロシージャに渡した後破棄する、といった通常の場合にはキャッシュは必要ありません。
一時LOBは、対応するOraBLOB
またはOraCLOB
への参照がクライアントに存在しなくなるまで、データベースに存在します。これらの参照には、一時OraBLOB
またはOraCLOB
オブジェクトを含む任意のOraParameter
またはOraParamArray
が含まれることに注意してください。
例
例: 一時CLOBをストアド・プロシージャに渡す方法
次の例では、CreateTempClob
メソッドを使用してOraCLOB
を作成する方法を示します。作成されたOraCLOB
は、データが移入され、CLOB
型の引数を含むストアド・プロシージャに渡されます。
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraClob as OraClob 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb","scott/tiger", 0&) 'Create the stored procedure used in this example OraDatabase.ExecuteSQL ("create or replace procedure GetClobSize" & _ "(in_clob IN CLOB, clobsize OUT NUMBER) as Begin clobsize" & _ " := DBMS_LOB.GETLENGTH(in_clob); End;") 'create an OraParameter object to represent Clob bind Variable OraDatabase.Parameters.Add "CLOB", Null, ORAPARM_INPUT, ORATYPE_CLOB 'the size will go into this bind variable OraDatabase.Parameters.Add "CLOBSIZE", Null, ORAPARM_OUTPUT, ORATYPE_NUMBER ' create a temporary CLOB set OraClob = OraDatabase.CreateTempClob 'Populate the OraClob with some data. Note that no row locks are needed. OraClob.Write "This is some test data" 'set the Parameter Value to the temporary Lob OraDatabase.Parameters("CLOB").Value = OraClob 'execute the sql statement which updates Address in the person_tab OraDatabase.ExecuteSQL ("Begin GetClobSize(:CLOB, :CLOBSIZE); end;") 'Display the size MsgBox OraDatabase.Parameters("CLOBSize").Value 'these two lines force the temporary clob to be freed immediately OraDatabase.Parameters.Remove "CLOB" Set OraClob = nothing
適用対象
説明
指定したダイナセットの現在の行を削除します。
使用方法
oradynaset.Delete oradynaset.DbDelete
備考
Delete
メソッドの使用前に、行を現在の行にしておく必要があります。行が現在の行になっていない場合は、エラーが発生します。
グローバル・トランザクション(つまり、BeginTrans
をすでに発行済)のダイナセットの所定の行でDelete
メソッドをコールすると、CommitTrans
またはRollback
メソッドをコールするまで、選択した行がロックされたままになります。
削除した行を参照すると、エラーが発生します。(MoveFirst
、MovePrevious
、MoveNext
またはMoveLast
メソッドを使用して)データベース内で移動が発生するまで、削除した行とその直後と直前の行は、現在のまま残ります。移動が発生すると、削除した行を再度現在の行にすることはできません。
トランザクションを使用した場合以外に、削除したレコードを復元する方法はありません。
注意: Edit 、AddNew またはDelete メソッドをコールすると、未処理のEdit またはAddNew のコールは処理前に取り消されます。Update メソッドを使用して保存されていない未処理の変更は、すべて取消処理中に失われます。 |
例
この例では、Delete
メソッドを使用してデータベースからレコードを削除する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger", 0&) 'Create the OraDynaset Object. Only select the employees in Department 10. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where" & _ "deptno=10", 0&) Do Until OraDynaset.EOF OraDynaset.Delete OraDynaset.MoveNext Loop MsgBox "All employees from department 10 removed." End Sub
適用対象
説明
索引を指定して要素を削除します。 このメソッドは、ORATYPE_TABLE
型(ネストした表)のOraCollection
でのみ使用できます。
使用方法
OraCollection.Delete index
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] index |
削除する要素の索引を指定する整数。
|
備考
Delete
メソッドは、クライアント側のネストした表に穴を作成します。指定した索引の要素がすでに削除されている場合、または指定した索引が所定の表に対して無効な場合、このメソッドはエラーを戻します。
例
次の例では、Delete
メソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim CourseList as OraCollection 'create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from division set OraDynaset = OraDatabase.CreateDynaset("select * from division", 0&) 'retrieve a Courses column from Division. 'Here Value property of OraField object returns CourseList OraCollection set CourseList = OraDynaset.Fields("Courses").Value 'Delete the CourseList NestedTable at index 2. 'Before that lock should be obtained OraDynaset.Edit CourseList.Delete 2 OraDynaset.Update
適用対象
説明
データベースの参照可能オブジェクトを削除します。
使用方法
OraRef.Delete
備考
削除したインスタンスの属性にアクセスすると、エラーになります。
例
次の例では、Delete
メソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim Person as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create an OraParameter object represent Person object bind Variable OraDatabase.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, ORATYPE_REF,"PERSON" 'execute the sql statement which selects person 'from the customers table for account = 10 OraDatabase.ExecuteSQL ("BEGIN select aperson into :PERSON from customers" & _ "where account = 10; END;") 'get the Person object from OraParameter set Person = OraDatabase.Parameters("PERSON").Value 'delete the Person object in the server for modifying its attributes Person.Delete
適用対象
説明
コレクション・イテレータを削除します。
使用方法
OraCollection.DeleteIterator
備考
なし
例
「例: OraCollectionイテレータ」を参照してください。
適用対象
説明
メッセージをデキューします。
使用方法
Q.Dequeue()
備考
メッセージの属性は、このオブジェクトに含まれているOraAQMsg
インタフェースを使用してアクセスできます。正常に実行された場合、このメソッドはメッセージ識別子をバイト配列で戻します。それ以外の場合は、空の配列(NULL)を戻します。
例
注意: 次のサンプル・コードは、メッセージ・デキューの標準的な例です。完全なAQサンプルは、 |
例: RAW型のメッセージのデキュー
'Dequeue the first message available Q.Dequeue Set Msg = Q.QMsg 'Display the message content MsgBox Msg.Value 'Dequeue the first message available without removing it ' from the queue Q.DequeueMode = ORAAQ_DQ_BROWSE 'Dequeue the first message with the correlation identifier ' equal to "RELATIVE_MSG_ID" Q.Navigation = ORAAQ_DQ_FIRST_MSG Q.correlate = "RELATIVE_MESSAGE_ID" Q.Dequeue 'Dequeue the next message with the correlation identifier ' of "RELATIVE_MSG_ID" Q.Navigation = ORAAQ_DQ_NEXT_MSG Q.Dequeue 'Dequeue the first high priority message Msg.Priority = ORAQMSG_HIGH_PRIORITY Q.Dequeue 'Dequeue the message enqueued with message id of Msgid_1 Q.DequeueMsgid = Msgid_1 Q.Dequeue 'Dequeue the message meant for the consumer "ANDY" Q.consumer = "ANDY" Q.Dequeue 'Return immediately if there is no message on the queue Q.wait = ORAAQ_DQ_NOWAIT Q.Dequeue
例: Oracleオブジェクト型のメッセージのデキュー
Set OraObj = DB.CreateOraObject("MESSAGE_TYPE") Set QMsg = Q.AQMsg(23, "MESSAGE_TYPE","SCOTT") 'Dequeue the first message available without removing it Q.Dequeue OraObj = QMsg.Value 'Display the subject and data MsgBox OraObj("subject").Value & OraObj("Data").Value
適用対象
説明
スキーマ・オブジェクトを記述します。このメソッドは、OraMetaData
インタフェースのインスタンスを戻します。
使用方法
OraMetaDataObj = OraDatabase.Describe(SchemaObjectName)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] SchemaObjectName |
記述するスキーマ・オブジェクトの名前を表す文字列。
|
備考
次のタイプのスキーマ・オブジェクトを記述できます。
表
ビュー
プロシージャ
ファンクション
パッケージ
シーケンス
コレクション(VARRAY
またはネストした表)
型
その他のスキーマ・オブジェクト(列など)または無効なスキーマ・オブジェクト名を記述しようとすると、エラーになります。ここにリストされていないスキーマ・オブジェクトは、直接記述せずにナビゲートしてください。
このメソッドは、emp
などのスキーマ・オブジェクトの名前に基づいて、COMオートメーション・オブジェクト(OraMetaData
)を戻します。OraMetaData
オブジェクトは、記述されているスキーマ・オブジェクトのすべての属性(OraMDAttribute
コレクション)に動的にナビゲートおよびアクセスするメソッドを提供します。
例
Describeの簡単な例
次のVisual Basicコードでは、Describe
メソッドを使用して、emp
表の各種属性を取り出し、表示する方法を示します。
Set emp = OraDatabase.Describe("emp") 'Display the name of the Tablespace MsgBox emp!tablespace 'Display name and data type of each column in the emp table. Set empColumns = emp!ColumnList Set ColumnList = empColumns.Value for i = 0 to ColumnList.Count - 1 Set Column = ColumnList(i).Value MsgBox "Column: " & Column!Name & " Data Type: " & Column!Data Type Next i
表の記述例
次の例を実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim OraMetaData As OraMetaData Dim OraMDAttribute As OraMDAttribute Dim ColumnList As OraMetaData Dim Column As OraMetaData 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger", 0&) 'Use Describe to retrieve the metadata object Set OraMetaData = OraDatabase.Describe("EMP") 'Display the type of the metadata MsgBox TypeofMetaData & OraMetaData.Type 'Display the count of attributes belonging to the table MsgBox NumberOfAttributes & OraMetaData.Count 'Attribute can be accessed using the explicit OraMetaData property: Attribute 'The index can be an integer or the attribute name Set OraMDAttribute = OraMetaData.Attribute(0) MsgBox "ObjectID: " & OraMDAttribute.Value 'Since Attribute is the default property of OraMetaData, an attribute can ' be accessed as follows. Here, we use attribute name as an index Set OraMDAttribute = OraMetaData("ObjectID") MsgBox "Name: " & OraMDAttribute.Name MsgBox "Value: " & OraMDAttribute.Value 'Value is the default property of OraMDAttribute, the following shows 'the Value of property "IsClustered" for the table MsgBox "Is Clustered: " & OraMetaData!IsClustered MsgBox "Is Partitioned: " & OraMetaData!IsPartitioned 'Retrieve the Column List Set OraMDAttribute = OraMetaData!ColumnList ' Use IsMDObject property to check whether an attribute's value is an OraMetaData If (OraMDAttribute.IsMDObject()) Then Set ColumnList = OraMDAttribute.Value 'Display the name and data type of each column For I = 0 To ColumnList.Count - 1 Set Column = ColumnList(I).Value ' Each column is again an OraMetaData MsgBox "Column: " & Column!Name & " data type: " & Column!Data Type Next I End If
例: ユーザー定義型の記述
次の例を実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim OraMetaData As OraMetaData Dim OraMDAttribute As OraMDAttribute Dim attrList As OraMetaData Dim attr As OraMetaData 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger",0&) Set OraMetaData = OraDatabase.Describe("ORAMD_ADDRESS") NumAttributes = OraMetaData!NumAttributes NumMethods = OraMetaData!NumMethods MsgBox "The Address type has " & NumAttributes & " attributes" MsgBox "Address Object has " & NumMethods & " methods" 'Retrieve the attribute list of this type object Set attrList = OraMetaData!Attributes.Value 'Display the name and data type of each attribute For I = 0 To attrList.Count - 1 Set attr = attrList(I).Value ' each attr is actually an OraMetaData MsgBox "Attribute Name: " & attr!Name MsgBox "Attribute Type: " & attr!TypeName Next I
例: 不明なスキーマ・オブジェクトの記述
次の例を実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。
Sub RecursiveDescribe(name$, xMD As OraMetaData) Dim xMDAttr As OraMDAttribute For I = 0 To xMD.Count - 1 Set xMDAttr = xMD.Attribute(I) ' If an attribute can be described further, describe it, ' otherwise display its attribute name & value If (xMDAttr.IsMDObject) Then RecursiveDescribe xMDAttr.name, xMDAttr.Value Else MsgBox name & "->" & xMDAttr.name & " = " & xMDAttr.Value End If Next I End Sub Sub Main() 'This example displays all the attributes of any schema object given Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim xMD As OraMetaData Dim x As String 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger", 0&) ' x is any database object, here the EMP table is used as an example x = "EMP" Set xMD = OraDatabase.Describe(x) MsgBox x & " is of the type " & xMD.Type RecursiveDescribe x, xMD End Sub
適用対象
説明
プールの親セッション・オブジェクトが破棄されると、そのプールも暗黙的に破棄されます。プールは、DestroyDatabasePool
メソッドをコールすることによって、いつでも明示的に破棄できます。
使用方法
DestroyDatabasePool()
備考
プールが存在しない場合にこのメソッドをコールすると、例外が発生します。
適用対象
説明
LOB操作のバッファリングを使用禁止にします。
使用方法
OraBlob.DisableBuffering OraClob.DisableBuffering
備考
このメソッドは、バッファを自動的にフラッシュしません。バッファリングを使用禁止にする前に、FlushBuffer
メソッドを使用して変更内容をフラッシュしてください。
適用対象
説明
OraIntervalDS
オブジェクトを除数で除算します。
使用方法
OraIntervalDSObj.Div divisor
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] divisor |
除数として使用するVariant 型の数値またはOraNumber オブジェクト。 |
備考
この操作の結果は、OraIntervalDS
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
適用対象
説明
OraIntervalYM
オブジェクトを除数で除算します。
使用方法
OraIntervalYMObj.Div divisor
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] divisor |
除数として使用するVariant 型の数値またはOraNumber オブジェクト。 |
備考
この操作の結果は、OraIntervalYM
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトを数値の引数で除算します。
使用方法
OraNumber.Div operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber オブジェクトまたは数値。
|
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
operand
に0(ゼロ)は指定できません。0(ゼロ)で除算するとエラーになります。
適用対象
説明
PL/SQLカーソルから作成されるダイナセットのキャッシュ・パラメータとフェッチ・パラメータを指定します。
使用方法
oraparameter.DynasetCacheParams SliceSize,perblock, Blocks, FetchLimit,FetchSize
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
SliceSize |
キャッシュ・スライス・サイズ。 |
perblock |
ブロック当たりのキャッシュ・スライス。 |
Blocks |
キャッシュのブロックの最大数。 |
FetchLimit |
フェッチ配列のサイズ。 |
FetchSize |
フェッチ配列のバッファ・サイズ。 |
備考
このメソッドは、カーソル変数を含むPL/SQLプロシージャの実行前にコールする必要があります。デフォルトでは、レジストリに指定されているキャッシュ・パラメータとフェッチ・パラメータのデフォルト値を使用して、ダイナセットが作成されます。
適用対象
説明
コピー・バッファにデータをコピーすることによって、現在の行の編集操作を開始します。
使用方法
oradynaset.Edit oradynaset.DbEdit
備考
Edit
メソッドでは、ローカルにキャッシュされたデータがOracle Databaseの対応する行と比較されます。Oracle Databaseのデータが、参照中のデータと同じでない場合は、エラーが生成されます。この操作が成功すると、Update
メソッドによる編集が完了するまで、または進行中の編集を破棄するようなデータベース内での移動が発生するまでの間、行は"SELECT
...
FOR
UPDATE"
文を使用してロックされます。"SELECT
...
FOR
UPDATE"
文の動作は、OpenDatabase
メソッドがコールされたときに使用されたオプション・フラグのLock
Wait
モードの影響を受けます。
注意: キャッシュされたデータは、BLOB 、CLOB 、Object 、REF およびコレクション型についてはデータベースと比較されず、無関係に更新されます(内容を保障しない書込み)。 |
編集中は、フィールドへの変更はシャドウであるコピー・バッファに保持され、データベースの実際の内容には反映されません。ただし、編集操作を行っている間、行への参照には、新しく変更されたデータが戻されます。
このダイナセットに付加されているデータ・コントロール内でデータを変更した場合は、次のレコード移動時にEdit
メソッドが自動的にコールされます。そのため、このメソッドが必要になるのは、コード内のフィールド・データを変更するときのみです。
注意: Edit 、AddNew またはDelete メソッドをコールすると、未処理のEdit またはAddNew のコールは処理前に取り消されます。Update 操作を使用して保存されていない未処理の変更は、すべて取消処理中に失われます。 |
例
この例では、Edit
およびUpdate
メソッドを使用して、データベース内の値を更新する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Traverse until EOF is reached, settingeach employee's salary to zero Do Until OraDynaset.EOF OraDynaset.Edit OraDynaset.Fields("sal").value = 0 OraDynaset.Update OraDynaset.MoveNext Loop MsgBox "All salaries set to ZERO." End Sub
適用対象
説明
データベースの参照可能オブジェクトをロックします。
使用方法
OraRef.Edit
備考
OraRef
の基礎となる参照可能オブジェクトの属性を変更する前に、このメソッドをコールする必要があります。コールせずに変更しようとするとエラーが発生します。このメソッドのコールでは、データベースのオブジェクトをロックするために、ネットワーク・ラウンドトリップが発生します。データベースで別のユーザーがオブジェクトを変更すると、エラーになります。オブジェクトは、EditOption
メソッドを使用するとPIN操作中にもロックできます。
例
次の例では、データベースにあるPERSON
という参照可能オブジェクトの属性を更新します。
サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。
ダイナセットの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim Person as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from customers set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&) 'retrieve a aperson column from customers. 'Here Value property of OraField object 'returns Person OraRef set Person = OraDynaset.Fields("aperson").Value 'locks the Person object in the server for modifying its attributes Person.Edit Person.Name = "Eric" Person.Age = 35 'Update method flushes the modified referenceable object in the server Person.Update
パラメータの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim Person as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create an OraParameter object represent Address object bind Variable OraDatabase.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, _ ORATYPE_REF,"PERSON" 'execute the sql statement which selects person from the customers table OraDatabase.ExecuteSQL ("BEGIN select aperson into :PERSON" & _ "from customers where account = 10; END;") 'get the Person object from OraParameter set Person = OraDatabase.Parameters("PERSON").Value 'locks the Person object in the server for modifying its attributes Person.Edit Person.Name = "Eric" Person.Age = 35 'Update method flushes the modified referenceable object in the server Person.Update
適用対象
説明
イテレータが指しているコレクション要素の現在の値を戻します。
使用方法
elem_val = OraCollection.ElementValue
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
elem_val |
コレクションの要素値を表すVariant 。 |
要素の型
Object
型およびREF
型の要素の場合は、要素の値が、その型に相当するOO4Oオブジェクトとして戻されます。次の表に、要素の型とその要素の戻り値を示します。
要素の型 | 要素の値 |
---|---|
Object |
OraObject |
REF |
OraRef |
Date |
String |
Number |
String |
CHAR 、VARCHAR2 |
String |
Real |
Real |
Integer |
Integer |
備考
EOC
またはBOC
プロパティがTRUE
を戻しているときにこのメソッドをコールするとエラーが発生します。要素のVariant
型は、コレクションの要素の型によって決まります。
例
「例: OraCollectionイテレータ」を参照してください。
適用対象
説明
LOB操作のバッファリングを使用可能にします。
使用方法
OraBlob.EnableBuffering OraClob.EnableBuffering
備考
バッファリングを使用可能にすると、FlushBuffer
メソッドがコールされるまでLOBバッファリング・サブシステムで変更内容をバッファリングし、ネットワーク・ラウンドトリップ回数を最小に抑えます。LOBの特定の領域に少量の読取りと書込みを繰り返し実行するようなアプリケーションの場合に効果があります。
LOBバッファリングの使用には、多くの注意事項と制限があります。 ここでは要約を示しますが、詳細は『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
制限事項
バッファリングが使用可能であるときには、次のLOBメソッドを使用できません。
Append
Copy
Erase
Size
Trim
CopyFromBFILE
CopyFromFile
CopyToFile
1回の読取りまたは書込み操作は、512KBに制限されています。
バッファされた操作に関するエラー報告は、次のデータベース・アクセスまで遅延されます。
トランザクション・サポートは保証されません。エラーが発生した場合、変更内容のロールバックはユーザーが手動で行う必要があります。
トランザクション内で、バッファリング・システムをバイパスするLOB列に対して、バッファリング可能なLOBとしての更新を実行しないでください。この状況は、INSERT
文の実行で発生する可能性があります。
バッファリングして所定のLOBに書込みができるLOBオブジェクトは1つのみです。同じLOBを指している他のLOBオブジェクトがバッファリングして書き込もうとすると、エラーになります。
OraParameter
オブジェクトから取得したLOBオブジェクトを、バッファリング可能にしてOUT
パラメータにバインドすると、エラーになります。
バッファリングが可能なLOBに対してClone
メソッドを使用すると、エラーになります。
LOBの最後に直接追加することはできますが、オフセットを使用してLOBの最後を超えて書込み操作を行うと、空白の埋込み(CLOB
の場合)または0(ゼロ)の埋込み(BLOB
の場合)となり、エラーになります。
適用対象
説明
このオブジェクトに含まれるメッセージ(OraAQMsg
)をエンキューします。
使用方法
Msgid = Q.Enqueue
備考
正常に実行された場合、このメソッドはメッセージ識別子をバイト配列で戻します。それ以外の場合は、空の配列(NULL)を戻します。
例
注意: 次のサンプル・コードは、メッセージ・デキューの標準的な例ですが、そのままでは実行できません。完全なAQサンプルは、 |
RAW型のメッセージのエンキュー
'Create an OraAQ object for the queue "DBQ" Dim Q as OraAQ Dim Msg as OraAQMsg Dim OraSession as OraSession Dim DB as OraDatabase Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set DB = OraSession.OpenDatabase("mydb", Òscott/tiger" 0&) Set Q = DB.CreateAQ("DBQ") 'Get a reference to the AQMsg object Set Msg = Q.AQMsg Msg.Value = "Enqueue the first message to a RAW queue." 'Enqueue the message Q.Enqueue 'Enqueue another message. Msg.Value = "Another message" Q.Enqueue 'Enqueue a message with non-default properties. Msg.Priority = ORAQMSG_HIGH_PRIORITY Msg.Delay = 5 Msg.Value = "Urgent message" Q.Enqueue Msg.Value = "The visibility option used in the enqueue call" & _ "is ORAAQ_ENQ_IMMEDIATE" Q.Visible = ORAAQ_ENQ_IMMEDIATE Msgid = Q.Enqueue 'Enqueue Ahead of message Msgid_1 Msg.Value = "First Message to test Relative Message id" Msg.Correlation = "RELATIVE_MESSAGE_ID" Msg.delay = ORAAQ_MSG_NO_DELAY Msgid_1 = Q.Enqueue Msg.Value = "Second message to test RELATIVE_MESSAGE_ID is queued" & _ " ahead of the First Message " Q.RelMsgId = Msgid_1 Msgid = Q.Enqueue
Oracleオブジェクト型のメッセージのエンキュー
'Prepare the message. MESSAGE_TYPE is a user defined type in the "AQ" schema Set OraMsg = Q.AQMsg(23, "MESSAGE_TYPE","SCOTT") Set OraObj = DB.CreateOraObject("MESSAGE_TYPE") OraObj("subject").Value = "Greetings from OO4O" OraObj("text").Value = "Text of a message originated from OO4O" Msgid = Q.Enqueue
適用対象
説明
指定したオフセットから始まるこのオブジェクトのLOB値の指定部分を消去します。
使用方法
OraBlob.Erase amount, offset OraClob.Erase amount, offset
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] amount |
消去する最大文字数またはバイト数を指定する整数。
|
[in ] offset [オプション] |
LOB値の消去を開始する絶対オフセットを指定するための整数。 デフォルト値は1です。 |
備考
このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。要求した文字数またはバイト数を消去する前にLOB値の最後に達した場合は、実際の文字数またはバイト数と要求した文字数またはバイト数の間に相違が発生します。BLOB
型の場合の消去は、既存のLOB値を0(ゼロ)バイト充填文字で上書きします。CLOB
型の場合の消去は、既存のLOB値を空白で上書きします。
適用対象
説明
SELECT
以外のSQL文またはPL/SQLブロックを1つ実行します。
使用方法
rowcount = oradatabase.ExecuteSQL(sql_statement) rowcount = oradatabase.DbExecuteSQL(sql_statement)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
sql_statement |
SELECT 以外の有効なOracle SQL文。 |
備考
SQL文を実行し、その文で処理された行数を戻します。
sql_statement
引数は、ブレークのない連続する1行として指定できます。行をブレークする必要がある場合は、改行(ASCII 10)を使用します。キャリッジ・リターン(ASCII 13)は、基礎となるOracle DatabaseファンクションがNULL終端文字として取り扱うため、使用しないでください。
SQL文を実行すると、データベースに対するコミットがデフォルトで生成されます。これを回避するには、ExecuteSQL
メソッドの使用前に、セッション・オブジェクトにBeginTrans
メソッドを使用します。
PL/SQLのバインド変数は、OraParameters
と組み合せて使用できます。
PL/SQLブロックの実行時またはストアド・プロシージャのコール時は、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN
文とEND
文を付ける必要があります。 これは、SQL*PlusおよびSQL*DBAのEXECUTE
コマンドと同じです。
注意: 実行するSQL文またはPL/SQLブロックが、現在オープンしているダイナセットに悪影響を与える可能性があるため、ExecuteSQL メソッドの使用には注意が必要です。ExecuteSQL メソッドに使用するOraDatabase オブジェクトが、ダイナセットを作成するために使用されたオブジェクトと同一の場合は、特に注意してください。不確実な場合は、異なるOraDatabase オブジェクトを使用してください。 |
トランザクション・モードでデータベースのコミットが発行された場合は、通常のダイナセット操作が悪影響を受ける可能性があります。これは、SQLのコミット文、データ制御言語(DCL)またはデータ定義言語(DDL)コマンドが発行された場合に発生する可能性があります。CREATE
、DROP
、ALTER
、GRANT
およびREVOKE
など、DCLとDDLのSQLコマンドは、常にコミットを強制し、コマンド以前に実行された内容をすべてコミットします。 DCL、DDLおよびトランザクションの詳細は『Oracle Database SQL言語リファレンス』を参照してください。
データ型
Long
Integer
例
例: ExecuteSQL
この例では、Add
およびRemove
パラメータ・メソッド、ServerType
パラメータ・プロパティ、およびストアド・プロシージャGetEmpName
とストアド・ファンクションGetSal
をコールするExecuteSQL
データベース・メソッドを使用します。例を実行する前に、ORAEXAMP.SQL
ファイルを実行して、GetEmpName
とGetSal
、およびその他の必要なオブジェクト型とLOBをOracle Databaseに作成してください。次に、このOO4Oコード例をコピーして、フォームの定義セクションに貼り付け、プログラムを実行します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDatabase 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Add EMPNO as an Input/Output parameter and set its initial value. OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT OraDatabase.Parameters("EMPNO").ServerType = ORATYPE_NUMBER 'Add ENAME as an Output parameter and set its initial value. OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT OraDatabase.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2 'Add SAL as an Output parameter and set its initial value. OraDatabase.Parameters.Add "SAL", 0, ORAPARM_OUTPUT OraDatabase.Parameters("SAL").ServerType = ORATYPE_NUMBER 'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME. ' This Stored Procedure can be found in the file ORAEXAMP.SQL. OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;") 'Display the employee number and name. 'Execute the Stored Function Employee.GetSal to retrieve SAL. ' This Stored Function can be found in the file ORAEXAMP.SQL. OraDatabase.ExecuteSQL ("declare SAL number(7,2); Begin" & _ ":SAL:=Employee.GetEmpSal (:EMPNO); end;") 'Display the employee name, number and salary. MsgBox "Employee " & OraDatabase.Parameters("ENAME").value & ", #" & _ OraDatabase.Parameters("EMPNO").value & ",Salary=" & _ OraDatabase.Parameters("SAL").value 'Remove the Parameters. OraDatabase.Parameters.Remove "EMPNO" OraDatabase.Parameters.Remove "ENAME" OraDatabase.Parameters.Remove "SAL" End Sub
適用対象
説明
指定した索引に要素が存在する場合はTRUE
、それ以外の場合はFALSE
を戻します。 ORATYPE_TABLE
型のOraCollection
の場合のみ有効です。
使用方法
exists = OraCollection.Exist index
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[out ] exists |
要素の存在状態を示すブール値。 |
[in ] index |
要素の索引を指定する整数。
|
備考
なし
適用対象
説明
eを底とするOraNumber
オブジェクトのべき乗を計算します。
使用方法
OraNumber.Exp
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
キャッシュに参照可能オブジェクトをフェッチし、関連付けられているOraRef
オブジェクトを戻します。
使用方法
Set OraRef = OraDatabase.FetchOraRef(hex_value)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
hex_value |
16進のREF 値を含んだ文字列。
|
備考
hex_value
引数は、OraRef.HexValue
プロパティを介して、またはOraDynaset.GetXML
メソッドで生成されたXMLドキュメントから取得できます。
適用対象
説明
LONG
またはLONG
RAW
型のフィールドに格納されたバイト数を戻します。設計時には使用できません。実行時は読取り専用です。
使用方法
data_size = orafield.FieldSize( ) data_size = orafield.DbFieldSize( )
備考
LONG
またはLONG
RAW
型のフィールドに格納されたバイト数(約64KBの値まで)を戻します。64KBを超える値がフィールドに含まれている場合、FieldSize
は-1
を戻します。
Oracle Databaseは64KBを超える列の長さは戻しません。このため、列の長さを判断する唯一の方法は列の取出しです。リソース節約のため、64KBを超える長い列が自動的に取り出されることはありません。
データ型
Long Integer
適用対象
説明
FindClause
に一致する指定行をダイナセットで検索します。FindClause
は、有効なWHERE
句で、WHERE
のないものを指定できます。現在のFindClause
が、前回の検索操作の最後の条件句と一致している場合、現在のFindClause
は再解析されません。
これらのメソッドは、一致する行に到達している場合を除いて、アドバイス・オブジェクトをコールすることなく、一致する行に現在の行を直接移動します。一致する行が見つからない場合、NoMatch
プロパティはTRUE
に設定され、現在の行はそのままになります。
使用方法
oradynaset.FindFirst FindClause oradynaset.FindLast FindClause oradynaset.FindNext FindClause oradynaset.FindPrevious FindClause
備考
FindClause
には、次の種類の式が使用できます。
単純な問合せ。例: "deptno = 20"
。
複雑な式を含む問合せ。例: "sal
+
100
>
1000"
。
SQLファンクション・コール。例: "UPPER(ename)
=
'SCOTT'
"
または"NVL(comm,
0)
=
0"
。
副問合せ。例: "deptno
in
(select
deptno
from
dept)"
。
SQL LIKE
演算子は、マルチバイト言語では機能しません。ユーザーのスキーマには、DUAL
表またはシノニムが必要です。日付の値は、Visual Basic形式で検索および比較されます。これは、コントロール パネルで指定される形式です。そのため、デフォルトのOracle形式であるDD-MON-YYYYなど、その他の形式を使用すると、日付の比較は失敗します。
SQLファンクションTO_CHAR
(date
, fmt
)は、使用できません。1つ目の引数はネイティブのOracle形式の日付値であることが必要ですが、OO4Oでは文字列の日付のみが処理されるためです。
SQLファンクションTO_DATE
では、文字列が日付に変換されますが、前述のとおり、OO4OによってVisual Basic形式の文字列に再変換されるため、比較はやはり失敗します。
NO_CACHE
ダイナセットのFindPrevious
およびFindLast
メソッドは機能しません。NoMatch
はTRUE
に設定されます。
注意: エラーを回避するには、Find
メソッドのコール前にEOF
またはBOF
をチェックします。
例
この例では、FindFirst
、FindNext
、FindPrevious
メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim OraFields As OraFields Dim FindClause As String Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "SCOTT/TIGER", 0&) Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where empno" & _ ">= 7654 and empno <= 7844 ", ORADYN_NO_BLANKSTRIP) Set OraFields = OraDynaset.Fields OraDynaset.MoveFirst 'FindClause for job as MANAGER FindClause = "job LIKE '%GER'" OraDynaset.FindFirst FindClause 'NoMatch property set to true , if no rows found If OraDynaset.NoMatch Then MsgBox "Couldn't find rows " else MsgBox OraFields("ename").Value ' Should display BLAKE OraDynaset.FindNext FindClause MsgBox OraFields("ename").Value ' Should display CLARK OraDynaset.FindPrevious FindClause MsgBox OraFields("ename").Value ' Should display BLAKE endif End Sub
適用対象
説明
OraNumber
オブジェクトの下限値を計算します。
使用方法
OraNumber.Floor
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
LOBのバッファリングが使用可能な場合に、LOBのデータをデータベースにフラッシュします(移します)。
使用方法
OraBlob.FlushBuffer OraClob.FlushBuffer
適用対象
説明
プールから、次に使用可能なOraDatabase
オブジェクトを戻します。
使用方法
GetDatabaseFromPool(long waitTime)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
waitTime |
プールに最大数のオブジェクト数があり、すべてが使用中の場合に、このコールが次に使用可能なオブジェクトを待機している時間(ミリ秒単位)。 |
備考
プールからOraDatabase
オブジェクトを取り出すには、GetDatabaseFromPool
メソッドをコールします。このファンクションは、OraDatabase
オブジェクトへの参照を戻します。プールに最大許容オブジェクト数に満たないオブジェクトが保有され、それらのオブジェクトがすべて使用中の場合は、暗黙的に追加のOraDatabase
オブジェクトが作成されます。また、プール内のアイテムにタイムアウトしたOraDatabase
オブジェクトが含まれている場合も、新しいオブジェクトが作成されて戻されます。プールから取得したOraDatabase
オブジェクトは、使用中のマークが付けられ、そのオブジェクトがアプリケーションから参照されなくなるとプールに戻されます。
このコールでは、次の場合に例外が発生します。
接続プールが存在しない場合
プールにオブジェクトがない場合
タイムアウトが発生した場合
OraSession
のLastServerErr
プロパティには、例外の特定原因を示すコードが含まれます。
適用対象
説明
LONG
またはLONG
RAW
型フィールドの全体または一部分のバイトを含む文字列を戻します。
使用方法
data_string = orafield.GetChunk(offset, numbytes) data_string = orafield.DbGetChunk(offset, numbytes)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
offset |
データのコピー前にスキップするフィールド内のバイト数。 |
numbytes |
コピーするバイト数。 |
備考
GetChunk
メソッドは通常、ローカル・キャッシュから指定されたバイト数を取り出します。キャッシュ内にデータが見つからない場合は、GetChunk
メソッドがデータベースからデータを要求します。ダイナセット内のすべてのフィールド(LONGまたはLONG
RAW
型のフィールドを除く)のデータが取り出されて、一貫性検査のためにキャッシュされている値と比較されます。最後のフェッチ後に変更があった場合、GetChunk
メソッドは操作を中止します。この結果、エラーが発生し、NULL
文字列が戻されます。
LONG
またはLONG
RAW
型のフィールドが65280バイト未満の場合は、GetChunk
メソッドを使用せずにValue
プロパティを使用すると、データを速く取り出すことができます。GetChunk
メソッドは、別名を付けたLONG
またはLONG
RAW
型のフィールドには使用できません。
「LONG RAWからLOBまたはBFILEへの移行」を参照してください。
例
この例では、GetChunk
メソッドを使用してデータベース内のLONG
RAW
型の列を取り出し、ファイルとして保存する方法を示します。この例では、longraw
という列を含んだ表を示すOraDynaset
という有効なダイナセットが存在していると想定しています。このコードをコピーして、フォームの定義セクションに貼り付けてください。このプロシージャは、有効なファイル名を使用してコールしてください。
Sub GetChunkExample (FName As String) 'Declare various variables Dim CurSize As Integer, ChunkSize As Long Dim I As Integer, FNum As Integer, CurChunk As String 'Set the size of each chunk ChunkSize = 10240 frmChunk.MousePointer = HOURGLASS 'Get a free file number FNum = FreeFile 'Open the file Open FName For Binary As #FNum I = 0 'Loop through all of the chunks. Oracle does not return the size of columns > ' 64KB. We should loop until the length of our block is less than we asked for. Do CurChunk = OraDynaset.Fields("LONGRAW").GetChunk(I * ChunkSize, ChunkSize) CurSize = Len(CurChunk) 'Get the length of the current chunk. Put #FNum, , CurChunk 'Write chunk to file. I = I + 1 Loop Until CurSize < ChunkSize 'Close the file. Close FNum frmChunk.MousePointer = DEFAULT End Sub
適用対象
説明
LONG
またはLONG
RAW
型のフィールドからデータを読み込み、バイト配列に格納し、読み込んだデータのサイズを戻します。
使用方法
Size_read = orafield.GetChunkByte(ByteArray, offset, numbytes)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
ByteArray |
データを格納するバイト配列の最初の要素。
|
offset |
データのコピー前にスキップするフィールド内のバイト数。 |
numbytes |
コピーするバイト数。 |
備考
可能な場合、GetChunkByte
メソッドは、ローカル・キャッシュから指定されたバイト数を取り出します。ただし、一部のデータは、リソース節約のために、ローカルに格納されない場合があります。この場合、GetChunkByte
メソッドは、必要に応じてデータベースから必要なデータを要求します。この処理の一部として、ダイナセット内のすべてのフィールド(LONGまたはLONG
RAW
型のフィールドを除く)のデータが取り出されて、一貫性検査のためにキャッシュされている値と比較されます。元の部分データのフェッチ後に変更があった場合、GetChunkByte
メソッドは操作を中止します。この結果エラーが発生します。操作を中止した場合、戻される文字列はNULL
です。
LONG
またはLONG
RAW
型のフィールドが65280バイト未満の場合は、GetChunkByte
メソッドを使用せずにValue
プロパティを使用すると、データを速く取り出すことができます。GetChunkByte
メソッドは、別名を付けたLONG
またはLONG
RAW
型のフィールドには使用できません。
例
この例では、GetChunkByte
メソッドを使用してデータベース内のLONG
RAW
型の列を取り出し、ファイルとして保存する方法を示します。この例では、longraw
という列を含んだ表を示すOraDynaset
という有効なダイナセットが存在していると想定しています。このコードをコピーして、フォームの定義セクションに貼り付けてください。このプロシージャは、有効なファイル名を使用してコールしてください。
Sub GetChunkByteExample (FName As String) 'Declare various variables Dim CurSize As Integer, ChunkSize As Long Dim I As Integer, FNum As Integer, CurChunk() As Byte 'Set the size of each chunk ChunkSize = 10240 'Redim CurChunk Array ReDim CurChunk(ChunkSize) frmChunk.MousePointer = HOURGLASS 'Get a free file number FNum = FreeFile 'Open the file Open FName For Binary As #FNum I = 0 'Loop through all of the chunks 'Oracle does not return the size of columns > 64KB. We should loop until the 'length of our block is less than we asked for. Do CurSize = OraDynaset.Fields("type_longraw").GetChunkByte(CurChunk(0), I * ChunkSize, ChunkSize) If CurSize > 0 AND CurSize < ChunkSize Then ReDim CurChunk(CurSize) CurSize = OraDynaset.Fields("type_longraw").GetChunkByte(CurChunk(0), I * ChunkSize, CurSize) End If Put #FNum, , CurChunk 'Write chunk to file. I = I + 1 Loop Until CurSize <= 0 'Close the file. Close FNum frmChunk.MousePointer = DEFAULT End Sub
適用対象
説明
LONG
またはLONG
RAW
型のフィールドからデータを読み込み、Variant
に格納し、読み込んだデータのサイズを戻します。
使用方法
amount_read = orafield.GetChunkByteEx(ByteArray, offset, numbytes)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
ByteArray |
データを格納するVariant 型のバイト配列の名前。
|
offset |
データのコピー前にスキップするフィールド内のバイト数。 |
numbytes |
コピーするバイト数。 |
備考
可能な場合、GetChunkByteEx
メソッドは、ローカル・キャッシュから指定されたバイト数を取り出します。ただし、一部のデータは、リソース節約のために、ローカルに格納されない場合があります。この場合、GetChunkByteEx
メソッドは、必要に応じてデータベースから必要なデータを要求します。この処理の一部として、ダイナセット内のすべてのフィールド(LONG
またはLONG
RAW
型のフィールドを除く)が取り出されて、一貫性検査のためにキャッシュされている値と比較されます。元の部分データのフェッチ後に変更があった場合、GetChunkByteEx
は操作を中止し、エラーを戻します。
GetChunkByteEx
メソッドの最初のパラメータは、バイト配列の最初の要素を指定するGetChunkByte
メソッドとは異なり、Variant
であるため、ASP/IIS環境ではGetChunkByteEx
メソッドのみ使用可能です。
LONG
またはLONG
RAW
型のフィールドが65280バイト未満の場合は、GetChunkByteEx
メソッドを使用せずにValue
プロパティを使用すると、データを速く取り出すことができます。
「LONG RAWからLOBまたはBFILEへの移行」を参照してください。
例
GetChunkByteExメソッドを使用してLONG RAW型の列を取り出す例
この例では、GetChunkByteEx
メソッドを使用してデータベース内のLONG
RAW
型の列を取り出し、ファイルとして保存する方法を示します。 この例では、type_longraw
という列を含んだ表を示すOraDynaset
という有効なダイナセットが存在していると想定しています。このコードをコピーして、フォームの定義セクションに貼り付けてください。このプロシージャは、有効なファイル名を使用してコールしてください。
Sub GetChunkByteExExample (FName As String) 'Declare various variables Dim bytesread As Integer, ChunkSize As Long , bytearr() as byte Dim I As Integer, FNum As Integer, CurChunk 'Set the size of each chunk ChunkSize = 10240 frmChunk.MousePointer = HOURGLASS 'Get a free file number FNum = FreeFile 'Open the file Open FName For Binary As #FNum I = 0 'Loop through all of the chunks 'Oracle does not return the size of columns > 64KB. 'We should loop until the length of our block is 'less than we asked for. Do bytesread = OraDynaset.Fields("type_longraw").GetChunkByteEx(CurChunk,_ I * ChunkSize, ChunkSize) 'redim byte array redim bytearr(bytesread - 1) bytearr = CurChunk Put #FNum, , bytearr 'Write chunk to file. I = I + 1 Loop Until bytesread < ChunkSize 'Close the file. Close FNum frmChunk.MousePointer = DEFAULT End Sub
Active Server Pages(ASP)でGetChunkByteExメソッドを使用する例
'This example is for use with ASP (Active Server Pages) <%@ LANGUAGE = VBScript %> <%Response.ContentType = "image/JPEG"%> <% Dim OraDatabase, Oradynaset Dim Chunksize, BytesRead, CurChunkEx 'This assumes a pool of database connections have been created in the global.asa Set OraDatabase = OraSession.getDatabaseFromPool(10) 'This assumes a table called "art_gallery" and 'displays JPEG images stored in the table Set OraDynaset = OraDatabase.CreateDynaset("select art from art_gallery " & _ "where artist = 'Picasso'", 0) BytesRead = 0 'Reading in 32K chunks ChunkSize= 32768 Do BytesRead = OraDynaset.Fields("picture").GetChunkByteEx(CurChunkEx, _ i * ChunkSize, ChunkSize) if BytesRead > 0 then Response.BinaryWrite CurChunkEx end if Loop Until BytesRead < ChunkSize 'Cleanup, remove all local references Set OraDynaset = Nothing Set Oradatabase = Nothing %>
適用対象
説明
ダイナセットの内容に基づいてXMLドキュメントを生成します。
使用方法
XMLstring = oradynaset.GetXML(startrow, maxrows)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
startrow |
開始する行を示す行識別子(OraDynaset.RowPosition を参照)。この引数のデフォルト値は0(第1行)です。 |
maxrows |
取得する行の最大数(レコード・セットの最後に達した場合、戻される行はこれより少なくなります)。この引数を省略した場合は、すべての行が戻されます。 |
備考
このメソッドは、XMLドキュメントを含む文字列を返します。
出力XMLの書式は、OraDynaset
およびOraField
オブジェクトのXMLプロパティを使用してカスタマイズできます。
適用対象
説明
XMLドキュメントを生成し、それをファイルに書き込みます。
使用方法
oradynaset.GetXMLToFile (filename, startrow, maxrows)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
filename |
XMLが書き込まれるファイルの名前。同じ名前の既存ファイルは上書きされます。 |
startrow |
開始する行を示す行識別子(OraDynaset.RowPosition を参照)。この引数のデフォルト値は0 (第1行)です。 |
maxrows |
取得する行の最大数(レコード・セットの最後に達した場合、戻される行はこれより少なくなります)。この引数を省略した場合は、すべての行が戻されます。 |
備考
戻り値はありません。
XML出力の書式は、OraDynaset
およびOraField
オブジェクトのXMLプロパティを使用してカスタマイズできます。
適用対象
説明
ダイナセット・オブジェクトの複数のレコードをVariant
型のSAFEARRAYに取り出します。
使用方法
Array =OraDynaset.GetRows(num_rows, start, fields )
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
num_rows [オプション] |
取り出すレコードの数を表す整数。 デフォルト値はダイナセット内の行全体の数です。 |
start [オプション] |
GetRows 操作を開始するダイナセットの開始位置を表す整数。 デフォルト値はダイナセットの現在の位置です。 |
fields [オプション] |
単一のフィールド名、フィールド位置、フィールド名の配列またはフィールド位置番号の配列を表すVariant 。GetRows メソッドはこれらのフィールド内のデータのみを戻します。 |
備考
ダイナセットから2次元の配列にレコードをコピーするには、GetRows
メソッドを使用します。最初の添字はフィールドを識別し、2番目の添字は行番号を識別します。GetRows
メソッドがデータを戻すときに、Array
変数は自動的に適切なサイズに設定されます。
GetRows
メソッドのコールは、ダイナセット・オブジェクトの現在の行位置を変更しません。
例
次の例では、GetRows
メソッドを使用してデータを取り出します。
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim row, col As Integer Dim fields() As String 'Create the OraSession Object Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle Set OraDatabase = OraSession.OpenDatabase("ExampleDb", _ "scott/tiger", 0&) Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'The following line executes GetRows to get all records data_array = OraDynaset.GetRows() 'Now display all the data in data_array For row = 0 To UBound(data_array, 2) For col = 0 To UBound(data_array, 1) Debug.Print data_array(col, row) Next col Next row 'The following lines execute GetRows to get the data from 'the ename and empno fields starting at 5 ReDim fields(2) fields(0) = "EMPNO" fields(1) = "ENAME" 'Execute GetRows data_array = OraDynaset.GetRows(, 5, fields) 'Now display all the data in data_array For row = 0 To UBound(data_array, 2) For col = 0 To UBound(data_array, 1) Debug.Print data_array(col, row) Next col Next row
適用対象
説明
指定した索引にある配列の特定要素の値を戻します。
使用方法
OraParamArray.Get_Value(array, index)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] array |
配列名を表す文字列。
|
[in ] index |
オブジェクトの索引値を表す整数。
|
備考
OraParamArray.Get_Value
メソッドは、フィールドの値をVariant
で戻します。 パラメータの内容は、data_value
=
oraparameter.Value
の値によって設定されます。
Oracleのデフォルト日付書式は"DD-MMM-YY"ですが、DATE
型のフィールドは、コントロール パネルで指定されているVisual Basicのデフォルト日付書式で戻されることに注意してください。
Value
引数には、OraBLOB
オブジェクトなどのOracle Database 10gオブジェクトを使用できます。 Put_Value
の場合は、その時点でオブジェクトのコピーが作成されます。その索引値を参照する新しいオブジェクトを取得するために、Get_Value
へのアクセスが必要です。 たとえば、iotype
がORATYPE_BOTH
で、ダイナセットから取得したOraBLOB
が入力値として渡される場合、新たに更新されたParamaterArray
オブジェクトの出力値を取得するためには、SQLコードが実行された後にGet_Value
をコールする必要があります。
ダイナセットと同様に、ParamaterArray
のGet_Value
プロパティから取得したオブジェクトは、常に、そのParamaterArray
の索引について最新の値を参照します。Visual BasicのNULL
値を値として渡すこともできます。Visual BasicのEMPTY
値は、BLOB
およびCLOB
に対しては空のLOBを意味する目的で、Object
、VARRAY
およびネストした表のデータ型に対してはオブジェクトの属性がすべてNULL
であることを意味する目的で使用できます。
このメソッドは設計時には使用できません。実行時は読取り専用です。
RAW
型の列(ServerType
がORATYPE_RAW_BIN
)にバインドする場合、値はバイト配列である必要があります。
適用対象
説明
OraNumber
オブジェクトの双曲コサインを計算します。
使用方法
OraNumber.HypCos
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトの双曲サインを計算します。
使用方法
OraNumber.HypSin
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトの双曲タンジェントを計算します。
使用方法
OraNumber.HypTan
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
コレクションをスキャンするイテレータを初期化します。
使用方法
OraCollection.InitIterator
備考
このメソッドは、イテレータを初期化してコレクションの先頭を指すようにします。このメソッドが同じOracle Database 10gコレクション・インスタンスに対してコールされた場合は、イテレータがコレクションの先頭を指すようにリセットされます。ダイナセットの行ナビゲーションまたはパラメータRefresh
メソッドによって基礎となるコレクションが変更された場合、OraCollection
オブジェクトは自動的にイテレータを再初期化します。
InitIterator
メソッドのコール後、IterNext
メソッドをコールしないとコレクションの最初の要素が余分に繰り返されます。
例
「例: OraCollectionイテレータ」を参照してください。
適用対象
説明
OraIntervalDS
オブジェクトが引数と等しいかどうかをチェックします。
使用方法
isEqual = OraIntervalDSObj.IsEqual value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、数値またはOraIntervalDS オブジェクト。
|
備考
ブール値を戻します。OraIntervalDS
オブジェクトが引数と等しい場合はTRUE
、それ以外の場合はFALSE
を戻します。
value
がVariant
型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalDS
オブジェクトが表す合計日数を表す必要があります。
適用対象
説明
OraIntervalYM
オブジェクトが引数と等しいかどうかをチェックします。
使用方法
isEqual = OraIntervalYMObj.IsEqual value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
備考
ブール値を戻します。OraIntervalYM
オブジェクトが引数と等しい場合はTRUE
、それ以外の場合はFALSE
を戻します。
value
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
適用対象
説明
OraNumber
オブジェクトが引数の値と等しいかどうかをチェックします。
使用方法
bool = OraNumber.IsEqual value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、OraNumber または数値 。 |
備考
ブール値を戻します。すべての値が等しい場合はTRUE
、それ以外の場合はFALSE
を戻します。
適用対象
説明
OraTimeStamp
オブジェクトが引数と等しいかどうかをチェックします。
使用方法
isEqual = OraTimeStampObj.IsEqual value format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in] value |
比較するVariant 型の文字列、日付またはOraTimeStamp 。
|
[in ] [オプション] format |
値がString 型の場合に、value の解析に使用されるTIMESTAMP の書式文字列を指定します。format が指定されていない場合は、値の解析に現行のOraTimeStamp オブジェクトのFormat プロパティが使用されます。 |
備考
ブール値を戻します。OraTimeStamp
オブジェクトが引数と等しい場合はTRUE
、それ以外の場合はFALSE
を戻します。IsEqual
メソッドでは、OraTimeStamp
オブジェクトに格納されているすべての日時値が比較されます。
value
がString
型の場合、文字列の書式は、format
引数で指定した書式と一致する必要があります。format
を指定しない場合、文字列の書式は、現行のOraTimeStamp
オブジェクトのFormat
プロパティと一致する必要があります。
適用対象
説明
OraTimeStampTZ
オブジェクトが引数と等しいかどうかをチェックします。
使用方法
isEqual = OraTimeStampTZOb.IsEqual value, format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、日付またはOraTimeStampTZ 。
|
[in ] [オプション] format |
value がString 型の場合に、value の解析に使用されるTIMESTAMP WITH TIME ZONE の書式文字列を指定します。format が指定されていない場合は、value の解析に現行のOraTimeStampTZ オブジェクトのFormat プロパティが使用されます。 |
備考
ブール値を戻します。OraTimeStampTZ
オブジェクトが引数と等しい場合はTRUE
、それ以外の場合はFALSE
を戻します。IsEqual
メソッドでは、OraTimeStampTZ
オブジェクトに格納されている協定世界時(UTC)の日時値のみが比較されます。タイムゾーン情報は無視されます。
注意: UTCは以前グリニッジ標準時と呼ばれていました。 |
value
がString
型の場合、文字列の書式は、format
引数で指定した書式と一致する必要があります。format
を指定しない場合、文字列の書式は、現行セッションのOraTimeStampTZ
オブジェクトのFormat
プロパティと一致する必要があります。
value
がDate
型の場合、Date
の日時値は、セッションのタイムゾーンの日時値として解析されます。
適用対象
説明
OraIntervalDS
オブジェクトが引数より大きいかどうかをチェックします。
使用方法
isGreater = OraIntervalDSObj.IsGreater value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、数値またはOraIntervalDS オブジェクト。
|
備考
ブール値を戻します。OraIntervalDS
オブジェクトが引数より大きい場合はTRUE
、それ以外の場合はFALSE
を戻します。
value
がVariant
型の文字列の場合は、Day [+/-] HH:MI:SSxFFの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalDS
オブジェクトが表す合計日数を表す必要があります。
適用対象
説明
OraIntervalYM
オブジェクトが引数より大きいかどうかをチェックします。
使用方法
isGreater = OraIntervalYMObj.IsGreater value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
備考
ブール値を戻します。OraIntervalYM
オブジェクトが引数より大きい場合はTRUE
、それ以外の場合はFALSE
を戻します。
value
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
適用対象
説明
OraNumber
オブジェクトが引数の値より大きいかどうかをチェックします。
使用方法
bool = OraNumber.IsGreater value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、OraNumber オブジェクトまたは数値。
|
備考
ブール値を戻します。OraNumber
オブジェクトが引数より大きい場合はTRUE
、それ以外の場合はFALSE
を戻します。
適用対象
説明
OraTimeStamp
オブジェクトが引数より大きいかどうかをチェックします。
使用方法
isGreater = OraTimeStampObj.IsGreater value format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、日付またはOraTimeStamp 。
|
[in ] [オプション] format |
value がString 型の場合に、値の解析に使用されるTIMESTAMP の書式文字列を指定します。format が指定されていない場合は、値の解析に現行のOraTimeStamp オブジェクトのFormat プロパティが使用されます。 |
備考
ブール値を戻します。OraTimeStamp
オブジェクトが引数より大きい場合はTRUE
、それ以外の場合はFALSE
を戻します。IsGreater
メソッドでは、OraTimeStamp
オブジェクトに格納されているすべての日時値が比較されます。
value
がString
型の場合、文字列の書式は、format
引数で指定した書式と一致する必要があります。format
を指定しない場合、文字列の書式は、現行のOraTimeStamp
オブジェクトのFormat
プロパティと一致する必要があります。
適用対象
説明
OraTimeStampTZ
オブジェクトが引数より大きいかどうかをチェックします。
使用方法
isGreater = OraTimeStampTZObj.IsGreater value, format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、日付またはOraTimeStampTZ オブジェクト。
|
[in ] [オプション] format |
value がString 型の場合に、値の解析に使用されるTIMESTAMP WITH TIME ZONE の書式文字列を指定します。format が指定されていない場合は、value の解析に現行のOraTimeStampTZ オブジェクトのFormat プロパティが使用されます。 |
備考
ブール値を戻します。OraTimeStampTZ
オブジェクトが引数より大きい場合はTRUE
、それ以外の場合はFALSE
を戻します。IsGreater
メソッドでは、OraTimeStampTZ
オブジェクトに格納されているUTCの日時値のみが比較されます。タイムゾーン情報は無視されます。
value
がString
型の場合、文字列の書式は、format
引数で指定した書式と一致する必要があります。format
を指定しない場合、文字列の書式は、現行のOraTimeStampTZ
オブジェクトのFormat
プロパティと一致する必要があります。
value
がDate
型の場合、Date
の日時値は、セッションのタイムゾーンの日時値として解析されます。
適用対象
説明
OraIntervalDS
オブジェクトが引数より小さいかどうかをチェックします。
使用方法
isLess = OraIntervalDSObj.IsLess value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、数値またはOraIntervalDS オブジェクト。
|
備考
ブール値を戻します。OraIntervalDS
オブジェクトが引数より小さい場合はTRUE
、それ以外の場合はFALSE
を戻します。
value
がVariant
型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalDS
オブジェクトが表す合計日数を表す必要があります。
適用対象
説明
OraIntervalYM object
オブジェクトが引数より小さいかどうかをチェックします。
使用方法
isLess = OraIntervalYMObj.IsLess value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
比較するVariant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
備考
ブール値を戻します。OraIntervalYM
オブジェクトが引数より小さい場合はTRUE
、それ以外の場合はFALSE
を戻します。
value
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
value
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
適用対象
説明
OraNumber
オブジェクトが引数の値より小さいかどうかをチェックします。
使用方法
bool = OraNumber.IsLess value
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、OraNumber オブジェクトまたは数値。
|
備考
ブール値を戻します。OraNumberオブジェクトが引数より小さい場合はTRUE
、それ以外の場合はFALSE
を戻します。
適用対象
説明
OraTimeStamp
オブジェクトが引数より小さいかどうかをチェックします。
使用方法
isLessr = OraTimeStampObj.IsLess value format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、日付またはOraTimeStamp 。
|
[in ] [オプション] format |
値がString 型の場合に、値の解析に使用されるTIMESTAMP の書式文字列を指定します。書式が指定されていない場合は、値の解析に現行のOraTimeStamp オブジェクトのFormatプロパティが使用されます。 |
備考
ブール値を戻します。OraTimeStamp
が引数より小さい場合はTRUE
、それ以外の場合はFALSE
を戻します。IsLess
メソッドでは、OraTimeStamp
オブジェクトに格納されているすべての日時値が比較されます。
value
がString
型の場合、文字列の書式は、format
引数で指定した書式と一致する必要があります。format
を指定しない場合、文字列の書式は、現行のOraTimeStamp
オブジェクトのFormat
プロパティと一致する必要があります。
適用対象
説明
OraTimeSTampTZ
オブジェクトが引数より小さいかどうかをチェックします。
使用方法
isLess = OraTimeStampTZObj.IsLess value, format
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
Variant 型の文字列、日付またはOraTimeStampTZ 。
|
[in ] [オプション] format |
value がString 型の場合に、値の解析に使用されるTIMESTAMP WITH TIME ZONE の書式文字列を指定します。format が指定されていない場合は、value の解析に現行のOraTimeStampTZ オブジェクトのFormat プロパティが使用されます。 |
備考
ブール値を戻します。OraTimeStampTZ
オブジェクトが引数より小さい場合はTRUE
、それ以外の場合はFALSE
を戻します。IsLess
メソッドでは、OraTimeStampTZ
オブジェクトに格納されているUTCの日時値のみが比較されます。タイムゾーン情報は無視されます。
value
がString
型の場合、文字列の書式は、format
引数で指定した書式と一致する必要があります。format
を指定しない場合、文字列の書式は、現行のOraTimeStampTZ
オブジェクトのFormat
プロパティと一致する必要があります。
value
がDate
型の場合、Date
の日時値は、セッションのタイムゾーンの日時値として解析されます。
適用対象
説明
イテレータがコレクション内の次の要素を指すように移動します。
使用方法
OraCollection.IterNext
備考
イテレータを使用してコレクション要素にアクセスする方が、索引を使用するより高速です。
この機能を実行する前にイテレータがコレクションの最後の要素を指している場合、このメソッドをコールすると、EOC
プロパティにTRUE
を戻します。また、イテレータは変更されません。このメソッドを繰り返しコールするときは、EOC
プロパティをチェックしてください。
IterNext
メソッドは、InitIterator
メソッドの後にコールしてください。そうしないと、コレクションの最初の要素が余分に繰り返されます。
例
「例: OraCollectionイテレータ」を参照してください。
適用対象
説明
イテレータがコレクション内の前の要素を指すように移動します。
使用方法
OraCollection.IterPrev
備考
イテレータを使用してコレクション要素にアクセスする方が、索引を使用するより高速です。
この機能を実行する前にイテレータがコレクションの最初の要素を指している場合、このメソッドをコールするとBOC
プロパティにTRUE
を戻します。また、イテレータは変更されません。このメソッドを繰り返しコールするときは、BOC
プロパティをチェックしてください。
例
「例: OraCollectionイテレータ」を参照してください。
適用対象
説明
指定されたオブジェクトのLastServerErr
プロパティを値0(ゼロ)に消去し、LastServerErrText
プロパティをNULL
に設定します。
使用方法
oradatabase.LastServerErrResetorasession.LastServerErrReset
備考
このメソッドを使用すると、ユーザー・プログラムでは、Oracleエラーが生成されたプログラム要求の判別が容易になります。
適用対象
説明
OraNumber
オブジェクトの自然対数(eを底とする)を計算します。
使用方法
OraNumber.Ln
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
このメソッドでは、OraNumber
オブジェクトが0(ゼロ)以下である場合、エラーが発生します。
適用対象
説明
OraNumber
オブジェクトを底として使用し、operand
の対数を計算します。
使用方法
OraNumber.Log operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber または数値 。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
このメソッドでは、OraNumber
オブジェクトまたはoperand
が0(ゼロ)以下である場合、エラーが発生します。
適用対象
説明
パターンのオフセット位置からn
番目のオカレンス位置を戻します。
使用方法
position = OraBlob.MatchPos pattern, offset, nth position = OraClob.MatchPos pattern, offset, nth position = OraBFile.MatchPos pattern, offset, nth
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] pattern |
LOB内で検索する文字列(CLOB )、またはバイト配列(BLOB またはBFILE )。 |
[in ] Offset |
LOBまたはBFILE で検索を開始する位置。 |
[in ] nth |
オカレンス番号。 |
備考
このコールは現在、DBMS_LOB.INSTR()
を使用するPL/SQLブロックを実行することによって実装されています。
適用対象
説明
OraNumber
オブジェクトをoperand
で除算した剰余を取得します。
使用方法
OraNumber.Mod operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber または数値 。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
operand
が0(ゼロ)の場合、エラーが発生します。
適用対象
説明
アプリケーションのフェイルオーバー通知ハンドラを登録します。
使用方法
OraDatabase.MonitorForFailover FOSink, FOCtx
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] FOSink |
フェイルオーバー時に通知されるOnFailover メソッドを実装するIDispatch インタフェース。 |
[in ] FOCtx |
フェイルオーバー時にアプリケーションがOnFailover メソッドに渡す必要があるコンテキスト固有の情報。 |
備考
フェイルオーバー通知を受信するには、通知ハンドラがMonitorForFailover
メソッドに登録されている必要があります。通知ハンドラは、OnFailover
メソッドを実装するオートメーション・オブジェクト(Visual Basicのクラス・モジュール)であることが必要です。
このメソッドの構文は、次のとおりです。
Public Function OnFailover(Ctx As Variant, fo_type As Variant,fo_event as Variant, fo_OraDB as Variant)
変数 | 説明 |
---|---|
[in] Ctx |
アプリケーションによってMonitorForFailover メソッドに渡されます。フェイルオーバー時にアプリケーションが渡す必要があるコンテキスト依存の情報です。 |
[in] fo_type |
Failover タイプ。クライアントが要求したフェイルオーバーのタイプです。次の値を指定できます。
|
[in]
|
Failover イベント。フェイルオーバーの状態を示します。次の複数の値を設定できます。
|
[in] fo_OraDB |
フェイルオーバー中のユーザー・セッションのOraDatabase オブジェクト。 fo_event 変数がOO4O_FO_REAUTH の場合のみ有効です。 |
例
フェイルオーバー通知の例
「例: フェイルオーバー通知」を参照してください。
適用対象
説明
指定されたメッセージをデキューするモニター・スレッドを開始します。
使用方法
Q.MonitorStart NotificationHandler, CallbackCtx, MsgFilterVal,MsgFilter
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] NotificationHandler |
新規メッセージの通知が必要なコールバック・メソッド(NotifyMe )を含むIDispatch インタフェース。 |
[in ] CallbackCtx |
アプリケーションがNotifyMe メソッドに渡す必要があるコンテキスト固有の情報。この情報は、ユーザー基準を満たす新しいメッセージがデキューされるたびに、NotifyMe メソッドに渡されます。 |
[in ] [オプション] MsgFilterVal |
メッセージ・フィルタの値を含むバイト配列。 MsgFilter がORAAQ_ANY の場合は無視されます。 |
[in ] [オプション] MsgFilter |
メッセージの選択基準を指定する整数の定数 。MsgFilter に指定できる値は、次のとおりです。
|
備考
NotifyMe
は通知オブジェクトのコールバック・メソッドです。このメソッドの構文は、次のとおりです。
Public Sub NotifyMe (ByVal Ctx As Variant, ByVal Msgid As Variant)
変数 | 説明 |
---|---|
[in] Ctx |
アプリケーションによってMonitorStart メソッドに渡される値。メッセージのデキュー時にアプリケーションが渡す必要があるコンテキスト依存の情報です。 |
[in] Msgid |
新しくデキューされたメッセージのメッセージID。監視中にエラーが発生した場合、Msgid 変数はNULLになります。 |
デフォルトでは、メッセージはRemove
モードでNotifyMe
に渡されます。デフォルトのデキュー・オプションは、このインスタンス(OraAQ
)のプロパティを設定することによって上書きできます。
MonitorStart
メソッドはORAAQ_SUCCESS
またはORAAQ_FAIL
を戻します。
適用対象
説明
以前に開始したモニター・スレッドを停止します。
使用方法
Q.MonitorStop
備考
モニターが実行されていない場合は、何も実行しません。
適用対象
説明
カーソルの位置を指定されたダイナセット内の最初、最後、次または前の行に変更します。これらのMoveメソッドはカーソルを次(または前など)の有効な行に移動します。削除された行はスキップします。
使用方法
oradynaset.MoveFirst oradynaset.DbMoveFirst
oradynaset.MoveLast oradynaset.DbMoveLast
oradynaset.MovePrevious oradynaset.DbMovePrevious
oradynaset.MoveNext oradynaset.DbMoveNext
備考
データ・コントロール・ボタンは(左から右または上から下へ)MoveFirst
、MovePrevious
、MoveNext
およびMoveLast
の各メソッドにマップされます。データ・コントロール・ボタンの使用時は、BOF
およびEOF
プロパティはTRUEになりません。
最初または最後のレコードがカレント・レコードの場合は、MoveFirst
メソッドまたはMoveLast
メソッドを使用してもレコードは移動しません。ダイナセットに対してMoveLast
メソッドを使用すると、問合せが強制終了します。
最初のレコードがカレント・レコードの場合にMovePrevious
メソッドを使用すると、カレント・レコードがなくなり、BOF
がTRUEになります。MovePrevious
メソッドを再度使用するとエラーが発生します。ただし、BOF
はTRUE
のままです。最後のレコードがカレント・レコードの場合にMoveNext
メソッドを使用すると、カレント・レコードがなくなり、EOF
がTRUEになります。MoveNext
メソッドを再度使用するとエラーが発生します。ただし、EOF
はTRUEのままです。 ORADYN_NO_MOVEFIRST
オプションを使用してダイナセットを作成すると、ダイナセットが空でも空でなくても、BOF
およびEOF
はTRUEになります。
ダイナセットのオープン時、BOF
はFALSE
で、最初のレコードがカレント・レコードです。ダイナセットが空の場合、BOF
およびEOF
は両方ともTRUEで、カレント・レコードは存在しません。
Edit
またはAddNew
操作が保留中のときに、データ・コントロールを介してMove
メソッドのいずれかを間接的に使用すると、Update
メソッドが自動的にコールされます。ただし、このメソッドはValidate
イベント中に停止できます。
Edit
またはAddNew
操作が保留中のときに、データ・コントロールを介さずにMove
メソッドのいずれかを直接使用すると、保留中のEdit
またはAddNew
操作によって、既存の変更内容が失われます。ただし、エラーは発生しません。
データは、必要に応じてデータベースからフェッチされます。したがって、MoveFirst
操作に続いてMoveNext
操作を実行すると、ミラー化された(キャッシュされた)ローカル・セットが、追加データの先読みなしに、増分構築されます。ただし、MoveLast
操作を実行するには、問合せ全体を評価してローカルに格納する必要があります。
ダイナセットがデータ・コントロールに付加されている場合、これらのメソッドは、最初にレコードの移動開始をデータ・コントロールのValidate
イベントに通知します。Validate
ハンドラは移動要求を拒否する可能性があります。この場合、要求は無視されます。レコード・ポインタが正常に移動すると、データ・コントロールに付加されているすべてのカスタム・コントロールに、新しいレコード位置が自動的に通知されます。
例
この例では、MoveFirst
、MoveNext
、MoveLast
およびMovePrevious
の各メソッドを使用してダイナセット内のレコードを移動する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&) MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _ OraDynaset.Fields("ename").value 'Move to the next record and display it. OraDynaset.MoveNext MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _ OraDynaset.Fields("ename").value 'Move to the last record and display it. OraDynaset.MoveLast MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _ OraDynaset.Fields("ename").value 'Move to the previous record and display it. OraDynaset.MovePrevious MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _ OraDynaset.Fields("ename").value End Sub
適用対象
説明
指定されたダイナセット内の指定された行にカーソル位置を変更します。
使用方法
oradynaset.MovePreviousn offset oradynaset.MoveNextn offset oradynaset.MoveRel offset oradynaset.MoveTo offset
MoveNextnメソッド
オフセットのレコード分、次に進みます。
MovePreviousnメソッド
オフセットのレコード分、前に戻ります。
MoveRelメソッド
現行の行を基準にしてオフセットのレコード分、移動します。 正の値(プラス(+)記号で示される)は、カーソルを表の下方に移動し、負の値はカーソルを表の上方に移動します。
MoveToメソッド
行番号オフセットに直接移動します。
備考
カーソルがMoveNextn
、MoveRel
またはMoveTo
メソッドを使用してダイナセットの最後を超えて移動すると、EOF
が設定されます。カーソルがMovePreviousn
、MoveRel
またはMoveTo
メソッドを使用してダイナセットの最初を超えて移動すると、BOF
が設定されます。MoveNextn
、MovePreviousn
およびMoveTo
メソッドは正の整数のみオフセットとして受け入れます。MoveRel
メソッドは、正と負の両方の整数をオフセットとして受け入れます。
MoveTo
rownum
は、行が削除されていないかぎり、常に同じ行を取得します。要求された行が削除されている場合、MoveTo
メソッドは次の有効な行に移動します。MoveNextn
、MovePreviousn
、MoveRel
およびMoveTo
メソッドは削除された行を考慮しません。したがって、行番号の相対的位置を基準にこれらのメソッドを使用する場合は注意してください。
データ型
Long
Integer
例
この例では、MovePreviousn
、MoveNextn
、MoveRel
およびMoveTo
メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Private Sub Form_Load() Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim OraFields As OraFields Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "SCOTT/TIGER", 0&) Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where empno" & _ ">=7654 and empno <= 7844 ", ORADYN_NO LANKSTRIP) Set OraFields = OraDynaset.Fields 'Move to 3rd record from the first record OraDynaset.MoveNextn 3 'Should set EOF to true MsgBox OraFields("ename").Value ' Should be display SCOTT If OraDynaset.EOF = True Then MsgBox "End of the record reached" End If 'Move back from the current record by the offset 2 OraDynaset.MovePreviousn 2 MsgBox OraFields("ename").Value ' Should be display BLAKE If OraDynaset.BOF = True Then MsgBox "Start of the record reached" End If 'Move relative in the forward direction OraDynaset.MoveRel 2 MsgBox OraFields("ename").Value ' Should be display SCOTT If OraDynaset.EOF = True Then MsgBox "End of the record reached" End If 'Move relative in the backward direction OraDynaset.MoveRel -2 MsgBox OraFields("ename").Value ' Should be display BLAKE If OraDynaset.BOF = True Then MsgBox "Start of the record reached" End If 'Move to the record position 4 in the current dynaset OraDynaset.MoveTo 4 MsgBox OraFields("ename").Value ' Should be display SCOTT End Sub
適用対象
説明
OraIntervalDS
オブジェクトに乗数を乗算します。
使用方法
OraIntervalDSObj.Mul multiplier
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] multiplier |
乗数として使用するVariant 型の数値またはOraNumber オブジェクト。 |
備考
この操作の結果は、OraIntervalDS
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
適用対象
説明
OraIntervalYM
オブジェクトに乗数を乗算します。
使用方法
OraIntervalYMObj.Mul multiplier
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] multiplier |
乗数として使用するVariant 型の数値またはOraNumber オブジェクト。 |
備考
この操作の結果は、OraIntervalYM
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトにoperand
を乗算します。
使用方法
OraNumber.Mul operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber または数値 。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraIntervalDS
オブジェクトを否定します。
使用方法
OraIntervalDSObj.Neg
備考
この操作の結果は、OraIntervalDS
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
適用対象
説明
OraIntervalYM
オブジェクトを否定します。
使用方法
OraIntervalYMObj.Neg
備考
この操作の結果は、OraIntervalYM
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトを否定します。
使用方法
OraNumber.Neg
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
Oracleデータベースへの接続を確立します。
使用方法
OraServer.Open serverAlias
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] serverAlias |
データベースへの接続に使用するネットワーク別名を含む文字列。
|
備考
引数を指定しないと、前回接続を解除したデータベースに接続します。
適用対象
説明
データベースへのユーザー・セッションを確立します。所定のデータベース名、接続文字列および指定したオプションを使用して、新しいOraDatabase
オブジェクトを作成します。
使用方法
Set oradatabase = orasession.OpenDatabase(database_name,connect_string, options) Set oradatabase = oraserver.OpenDatabase(connect_string, options)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
database_name |
データ・コントロールをデータベースに接続するときに使用するOracleネットワーク指定子。 |
connect_string |
Oracleデータベースに接続するときに使用するユーザー名とパスワード。 |
options |
データベースのオプション・モードの設定に使用するビット・フラグ文字。 options = 0 の場合は、デフォルトのモード設定が適用されます。次の表に、使用可能なモードを示します。各モードは、それぞれの値を追加することで組み合せることができます。 |
定数
次の表に、オプション・フラグの定数とその値を示します。
定数 | 値 | 説明 |
---|---|---|
ORADB_DEFAULT |
&H0& |
Visual Basicモード(デフォルト):
SQLの非ブロック機能は、使用できなくなります。 |
ORADB_ORAMODE |
&H1& |
Oracleモード:
注意: トリガーを使用する場合は、完全なOracleモードを使用してデータを再度フェッチしてください。 |
ORADB_NOWAIT |
&H2& |
ロック非待機モード:
行のロック解除を待機しません。 注意: このオプションは、 |
ORADB_NO_REFETCH |
&H4& |
Oracleモード(再フェッチなし):
Oracleモードと同様に実行されますが、データはローカル・キャッシュに再フェッチされません。これによってパフォーマンスが向上します。 注意: データベースの列のデフォルトのために、データベースのデータとローカル・キャッシュが不一致になるため、行を編集せずに挿入する場合にのみ、再フェッチなしモードを使用してください。このモードで挿入した後に編集しようとすると、「データは変更されています。」(4119)エラーが発生します。 |
ORADB_NONBLK |
&H8& |
非ブロックモード:
SQL文の実行時は、非ブロック・モードをオンにします。非ブロック・モードは、 注意: この機能は使用不可になっています。 |
ORADB_ENLIST_IN_MTS |
&H10& |
MTSモードでのリスト:
|
ORADB_ENLIST_FOR_ CALLLBACK |
&H20& |
コールバック・モードでのリスト:
イベント通知をオンにします。フェイルオーバー通知を受信するには、このモードを使用可能にする必要があります。 |
これらの値は、oraconst.txt
ファイルにあります。 有効なデータベース別名の作成方法については、『Oracle Net Services管理者ガイド』を参照してください。
有効なconnect_string
引数の例は次のとおりです。
"scott/tiger"
"system/manager"
"/"
備考
OraConnection
オブジェクトは自動的に作成され、セッションのOraConnections
コレクション内に表示されます。データベースのオープンは、接続のオープンに影響を与えますが、SQL処理は実行しません。
次の接続エラーが戻される可能性があります。
ORA-28001「パスワードが期限切れです。」
ChangePassword
メソッドを使用すると、パスワードを変更できます。
例
この例では、ダイナセットおよび基礎となるすべてのオブジェクトをプログラムで作成する方法を示します。このコードをコピーして、txtEmpNo
およびtxtEName
という名前のテキスト・ボックスのあるフォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&) 'Display the first record. txtEmpNo = OraDynaset.Fields("empno").value txtEName = OraDynaset.Fields("ename").value End Sub
適用対象
説明
ダイナセットのSELECT
文で使用された元の列名に基づいてOraField
オブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。
使用方法
set OraField = OraFields.OriginalItem(field_index) set OraField = OraFields.OriginalItem(original_name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
field_index |
元の列名のフィールド索引。 |
original_name |
SQL文に指定した元のフィールド名。 |
備考
このプロパティは、SQL文に'schema.table.col'
のフィールド名が含まれている場合に、その元の名前に固有のフィールド・オブジェクトを取得するときに便利です。
例
次の例では、OriginalItem
メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim OraFields As OraFields 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) Set OraDynaset = OraDatabase.CreateDynaset("select scott.emp.deptno," & _ "dept.deptno from scott.emp, scott.dept where dept.deptno = emp.deptno", 0&) 'Get the Field collection object Set OraFields = OraDynaset.Fields 'get the original field object. Returns "scott.emp.deptno" MsgBox OraField.OriginalName Set OraField = OraFields.OriginalItem(1) 'Returns "dept.deptno" MsgBox OraField.OriginalName End Sub
適用対象
説明
ダイナセットのSELECT
文で使用された元の列名を戻します(これに対し、Name
プロパティが戻す値は、サーバーで表示されるフィールド名です)。設計時には使用できません。実行時は読取り専用です。
使用方法
field_name = Orafield.OriginalName
備考
orafield.OriginalName
メソッドは、指定したOraField
オブジェクトの名前を戻します。このメソッドにより、ダイナセットの作成時にSQL文に指定された元の列名が戻されます。SQL文に、
'schema.table.col'
のフィールド名が含まれている場合に便利です。これにより、重複した列名を参照できるようになります(SQL文で別名を使用することによって、列名の重複を回避する方法もあります)。
例
次の例では、OriginalName
プロパティの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim OraFields As OraFields 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) Set OraDynaset = OraDatabase.CreateDynaset("select scott.emp.deptno," & _ "dept.deptno from scott.emp, scott.dept where dept.deptno = emp.deptno", 0&) Set OraFields = OraDynaset.Fields 'Returns "DEPTNO" MsgBox OraFields(0).Name 'Returns "scott.emp.deptno" MsgBox OraFields(0).OriginalName 'Returns "dept.deptno" MsgBox OraFields(1).OriginalName End Sub
適用対象
説明
OraNumber
オブジェクトをオペランド乗します。
使用方法
OraNumber.Power operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber または数値 。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
表のパラメータに値を挿入します。
使用方法
OraParamArray.Put_Value(value, index)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] value |
挿入する値を表すVariant 。 |
[in ] index |
オブジェクトの索引値を表す整数。
|
備考
表の行にアクセスする前に値を挿入するには、このメソッドを使用してください。行に値を割り当てるまで、行には有効な値が含まれません。表内の未割当ての行を参照すると、OLEオートメーション・エラーが発生します。
value
引数には、OraBLOB
などのOracle Database 10gオブジェクトを使用できます。 Put_Value
の場合は、その時点でオブジェクトのコピーが作成されます。その索引値を参照する新しいオブジェクトを取得するために、Get_Value
へのアクセスが必要です。 たとえば、iotype
がORATYPE_BOTH
で、ダイナセットから取得したOraBLOB
が入力値として渡される場合、新たに更新されたParamaterArray
の出力値を取得するためには、SQLが実行された後にGet_Value
をコールする必要があります。
ダイナセットと同様に、ParamaterArray
のGet_Value
メソッドから取得したオブジェクトは、常に、そのParamaterArray
の索引について最新の値を参照します。Visual BasicのNULL
値を値として渡すこともできます。Visual Basicの値EMPTY
は、BLOB
およびCLOB
に対しては空のLOBを意味する目的で、OBJECT
、VARRAY
およびNESTED
TABLE
に対しては、オブジェクトの属性がすべてNULL
であることを意味する目的で使用できます。
RAW
型の列(ServerType
がORATYPE_RAW_BIN
)にバインドする場合、値はバイト配列である必要があります。
適用対象
説明
BLOB
、CLOB
またはBFILE
値の指定部分をバッファに読み込みます。読込みデータ長の合計数を戻します。
使用方法
amount_read = OraBlob.Read buffer, chunksize amount_read = OraClob.Read buffer, chunksize amount_read = OraBfile.Read buffer, chunksize
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[out ] buffer |
OraCLOB の場合はVariant 型の文字配列、OraBLOB またはピースの読込み元のOraBFILE の場合はVariant 型のバイト配列。 |
[in ] [オプション] chunksize |
読取り量を指定するための整数。 デフォルト値は、LOBのサイズです。OraBLOB またはOraBFILE の場合はバイト数、OraCLOB の場合は文字数を示します。 |
[out ] amount_read |
読込みデータ長の合計数を表す整数。
OraBLOB またはOraBFILE の場合はバイト数、OraCLOB の場合は文字数を示します。 |
備考
Offset
プロパティで指定されたオフセットからLOBデータまたはBFILE
データを読み込みます。複数ピースの読込み操作の場合は、PollingAmount
プロパティを読込みデータ長の合計数の値に設定し、Status
プロパティをチェックして各ピースの操作が正常に実行されたことを確認する必要があります。
注意: LOBの一部を読み込む場合は、chunksize パラメータを使用せず、PollingAmount プロパティを設定することをお薦めします。これによって、LOB全体が読み込まれる前に別のLOBメソッドが実行された場合に発生するエラーを回避できます。 |
例
「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。
例: LOBの複数ピース読取り
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim PartImage As OraBlob Dim chunksize As Long Dim AmountRead As Long Dim buffer As Variant Dim buf As String 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb","scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from part", 0&) 'Get OraBlob from OraDynaset Set PartImage = OraDynaset.Fields("part_image").Value 'Set Offset and PollingAmount property for piecewise Read operation PartImage.offset = 1 PartImage.PollingAmount = PartImage.Size chunksize = 50000 'Get a free file number FNum = FreeFile 'Open the file Open "image.dat" For Binary As #FNum 'Do the first read on PartImage, buffer must be a variant AmountRead = PartImage.Read(buffer, chunksize) 'put will not allow Variant type buf = buffer Put #FNum, , buf ' Check for the Status property for polling read operation While PartImage.Status = ORALOB_NEED_DATA AmountRead = PartImage.Read(buffer, chunksize) buf = buffer Put #FNum, , buf Wend Close FNum
例: LOBの単一ピース読取り
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim PartDesc As OraClob Dim AmountRead As Long Dim buffer As Variant Dim buf As String 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Add PartDesc as an Output parameter and set its initial value. OraDatabase.Parameters.Add "PartDesc", Null, ORAPARM_OUTPUT OraDatabase.Parameters("PartDesc").ServerType = ORATYPE_CLOB 'Execute the statement returning 'PartDesc' OraDatabase.ExecuteSQL ("BEGIN select part_desc into :PARTDESC from" & _ "part where part_id = 1 for update NOWAIT; END;") 'Get 'PartDesc' from Parameters collection Set PartDesc = OraDatabase.Parameters("PartDesc").Value 'Get a free file number FNum = FreeFile 'Open the file. Open "Desc.Dat" For Binary As #FNum 'Read entire CLOB value, buffer must be a Variant AmountRead = PartDesc.Read(buffer) 'put will not allow Variant type buf = buffer Put #FNum, , buf Close FNum
適用対象
説明
LONG
またはLONG
RAW
型のフィールドの全体または一部のバイト数を含む文字列を戻します。
使用方法
data_string = orafield.ReadChunk(offset, numbytes, bytesread)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
offset |
データのコピー前にスキップするフィールド内のバイト数。 |
numbytes |
コピーするバイト数。 |
bytesread |
実際に読み込まれたバイト数。 |
備考
ReadChunk
メソッドはGetChunk
メソッドと同じように動作しますが、実際に読み込まれたバイト数をbytesread
引数で戻します。
適用対象
説明
現行のConnect
、DatabaseName
およびSQLプロパティについて、ダイナセットをただちに更新します。
SQL文オブジェクト内のSQL文を再実行することによって、ダイナセットをただちに更新します。
使用方法
oradynaset.Refresh oradynaset.DbRefresh orasqlstmt.Refresh orasqlstmt.DbRefresh
備考
このメソッドは、すべての編集操作(Edit
およびAddNew
メソッド)を取り消して、SQL文バッファの現在の内容を実行し、結果のダイナセットの最初の行に移動します。Refresh
メソッドの発行前に作成されたダイナセット・オブジェクト(ブックマーク、レコード・カウントおよびフィールド・コレクションなど)は無効とみなされます。以前のダイナセットに関連付けられているOraConnection
およびOraSession
オブジェクトは変更されずにそのまま残ります。
このメソッドを使用してリフレッシュ操作を実行した方が、データ・コントロールによるリフレッシュより効率的です。また、このメソッドを使用すると、変更したSQL文を新しいダイナセットまたはOraSQLStmt
オブジェクトを作成せずに実行できます。
必要なデータベース操作(SQLの解析やバインドなど)が最小限に抑えられるため、oradynaset.Refresh
またはorasqlstmt.Refresh
は、パラメータ値の変更に役立つリフレッシュ・メソッドです。このメソッドは、パラメータの値のみを変更した場合にパフォーマンスを向上できます。
Refresh
メソッドが、無効なSQL文をダイナセットまたはSQL文オブジェクトのSQLプロパティに割り当てた後にコールされた場合も、これらのオブジェクトは有効です。ただし、この状態のダイナセットでは、行またはフィールドを操作できません。バインド済コントロールも異常な動作を示します。Visual Basicの標準的なデータ・コントロールのRecordSource
が、実行時に無効なSQL文に設定され、その後リフレッシュされた場合と同じ動作になります。
有効なSQL文を使用してオブジェクトをリフレッシュすると、通常のダイナセットとSQL文の操作に戻ります。Refresh
メソッドは、NULL
または空のSQL文を無効とみなします。
例
Refreshメソッドの例(OraDynaset)
この例では、パラメータ、Refresh
メソッドおよびSQLプロパティを使用して選択レコードを制限する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create a parameter with an initial value. OraDatabase.Parameters.Add "job", "MANAGER", 1 'Create the OraDynaset Object. Set OraDynaset =OraDatabase.CreateDynaset("select * from emp where job=:job",0&) 'Notice that the SQL statement is NOT modified. MsgBox OraDynaset.SQL 'Currently, OraDynaset only contains employees whose job is MANAGER. 'Change the value of the job parameter. OraDatabase.Parameters("job").Value = "SALESMAN" 'Refresh the dynaset. OraDynaset.Refresh 'Currently, OraDynaset only contains employees whose job is SALESMAN. 'Notice that the SQL statement is NOT modified. MsgBox OraDynaset.SQL 'Remove the parameter. OraDatabase.Parameters.Remove ("job") End Sub
Refreshメソッドの例(OraSQLStmt)
この例では、パラメータ、Refresh
メソッド、およびOraSQLStmtオブジェクトのSQLプロパティの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraSqlStmt As OraSQLStmt 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) OraDatabase.Parameters.Add "EMPNO", 7369, 1 OraDatabase.Parameters("EMPNO").ServerType = 2 'ORATYPE_NUMBER OraDatabase.Parameters.Add "ENAME", 0, 2 OraDatabase.Parameters("ENAME").ServerType = 1 'ORATYPE_VARCHAR2 Set OraSqlStmt = OraDatabase.CreateSQL("Begin Employee.GetEmpName (:EMPNO," & _ ":ENAME); end;", 0&) 'Notice that the SQL statement is NOT modified. MsgBox OraSqlStmt.SQL 'Should display SMITH MsgBox OraDatabase.Parameters("ENAME").Value 'Change the value of the empno parameter. OraDatabase.Parameters("EMPNO").Value = 7499 'Refresh the dynaset. OraSqlStmt.Refresh 'Should display ALLEN MsgBox OraDatabase.Parameters("ENAME").Value 'Notice that the SQL statement is NOT modified. MsgBox OraSqlStmt.SQL 'Remove the parameter. OraDatabase.Parameters.Remove ("job") End Sub
適用対象
説明
サブスクリプションをアクティブにします。
使用方法
orasubscription.Register
備考
指定したデータベース・イベントが起動すると、このサブスクリプションの作成時に渡されたdbevent
ハンドラのNotifyDBevents
メソッドがコールされます。
例
詳細な例は、「例: データベース・イベントが通知されるようにアプリケーションを登録する方法」を参照してください。
適用対象
説明
OraParameters
コレクションからパラメータを削除します。
使用方法
oraparameters.Remove(member_name)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
member_name |
0 〜Count -1 の範囲で整数の添字を指定するVariant またはパラメータ名。 |
備考
不要なパラメータの追加と削除を繰り返すのではなく、AutoBindDisable
およびAutoBindEnable
メソッドを使用してください。
ORATYPE_CURSOR
型のOraParameter
の場合は、このメソッドにより、カーソルに関連付けられたダイナセット・オブジェクトが破棄され、ローカル・キャッシュのテンポラリ・ファイルが消去されます。
例
「例: ExecuteSQL」を参照してください。
適用対象
説明
OraSubscriptions
コレクションからサブスクリプションを削除します。
使用方法
orasubscriptions.Remove(member)
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
member |
0 〜Count の範囲で整数の添字を指定するVariant またはサブスクリプション名。 |
備考
このメソッドは、アクティブなサブスクリプションを登録解除(削除)し、関連付けられたサブスクリプションを破棄します。
適用対象
説明
プールからOraDatabase
オブジェクトを削除します。
使用方法
OraDatabase.RemoveFromPool
備考
このメソッドは、GetDatabaseFromPool
メソッドを使用してプールから取り出したOraDatabase
オブジェクトにのみ適用されます。
OraDatabase
オブジェクトがプールのメンバーでない場合、例外またはエラーは発生しません。
このメソッドは、接続がすでに無効になっているプールからOraDatabase
オブジェクトを削除する場合に便利です。
適用対象
説明
すべてのトランザクションを無条件にロール・バックし、BeginTrans
メソッドによって開始されたトランザクション・モードを消去します。
使用方法
oraconnection.ResetTransorasession.ResetTrans
備考
このメソッドでは、イベントもエラーも生成されません。ResetTrans
メソッドはイベントを生成しないため、ロールバック操作やコミット操作のように、Validate
イベントのResetTrans
メソッドを取り消すことはできません。
注意: OraDatabase
オブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。
例
この例では、BeginTrans
およびResetTrans
メソッドを使用して、ダイナセットに対する一連の編集を1つのトランザクションにグループ化する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Start Transaction processing. OraDynaset.Session.BeginTrans 'Traverse until EOF is reached, setting each employee's salary to zero. Do Until OraDynaset.EOF OraDynaset.Edit OraDynaset.Fields("sal").value = 0 OraDynaset.Update OraDynaset.MoveNext Loop MsgBox "All salaries set to ZERO." 'Currently, the changes have NOT been committed to the database. 'End Transaction processing. 'Using ResetTrans means the rollback cannot be canceled in the Validate event. OraDynaset.Session.ResetTrans MsgBox "Salary changes rolled back." End Sub
適用対象
説明
現在のトランザクションを終了し、保留中の変更すべてをデータベースにロールバックします。
使用方法
oraconnection.Rollback orasession.Rollback oradatabase.Rollback
備考
このメソッドをコールすると、指定したセッションまたは接続を共有するすべてのOraDynaset
オブジェクトに対して、ロールバック要求を取り消す機会が与えられます。要求を取り消さない場合は、ロールバックが正常終了した時点でオブジェクトに通知されます。
この機能は、Oracle Data Control操作の一部として作成されるダイナセットに特に便利です。これらのダイナセットに対して、Validate
イベントを送信し、ロールバック要求を取り消すことができるようにします。
OraConnection
およびOraDatabase
:
Rollback
メソッドは、指定した接続内で保留中の全トランザクションをロールバックします。トランザクションが開始されていない場合、このメソッドは無効です。セッション全体のトランザクションが進行中の場合は、指定された接続用のトランザクションを早い時点でロールバックするために、このコールを使用できます。
OraSession
:
Rollback
メソッドは、指定したセッション内で保留中の全トランザクションをロールバックします。Rollback
メソッドは、トランザクションが開始されている場合のみ有効です。トランザクションが開始されていないときに、Rollback
メソッドを使用するとエラーが発生します。
注意: OraDatabase オブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。 |
例
この例では、BeginTrans
およびRollback
メソッドを使用して、ダイナセットに対する一連の編集を1つのトランザクションにグループ化する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Start Transaction processing. OraDynaset.Session.BeginTrans 'Traverse until EOF is reached, setting each employee's salary to zero. Do Until OraDynaset.EOF OraDynaset.Edit OraDynaset.Fields("sal").value = 0 OraDynaset.Update OraDynaset.MoveNext Loop MsgBox "All salaries set to ZERO." 'Currently, the changes have NOT been committed to the database. 'End Transaction processing. OraDynaset.Session.Rollback MsgBox "Salary changes rolled back." End Sub
適用対象
説明
OraNumber
オブジェクトを指定された小数位に四捨五入します。
使用方法
OraNumber.Power decplaces
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] decplaces |
小数点から右の桁数を指定して四捨五入する位置を示す整数。 負の値も指定可能で、小数点から左の桁数を示します。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトをπ(パイ)に設定します。
使用方法
OraNumber.SetPi
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
ラジアンで指定されたOraNumber
オブジェクトのサインを計算します。
使用方法
OraNumber.Sin
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraNumber
オブジェクトの平方根を計算します。
使用方法
OraNumber.Sqrt
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
OraNumber
オブジェクトが0(ゼロ)未満である場合、このメソッドはエラーを戻します。
適用対象
説明
OraIntervalDS
オブジェクトから引数を減算します。
使用方法
OraIntervalDSObj.Sub operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
減算するVariant 型の文字列、数値またはOraIntervalDS オブジェクト。
|
備考
この操作の結果は、OraIntervalDS
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
operand
がVariant
型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。
operand
が数値の場合、提供される値は、構成されたOraIntervalDS
オブジェクトが表す合計日数を表す必要があります。
適用対象
説明
OraIntervalYM
オブジェクトから引数を減算します。
使用方法
OraIntervalYMObj.Sub operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
減算するVariant 型の文字列、数値またはOraIntervalYM オブジェクト。
|
備考
この操作の結果は、OraIntervalYM
オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。
operand
がVariant
型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。
operand
が数値の場合、提供される値は、構成されたOraIntervalYM
オブジェクトが表す合計年数を表す必要があります。
適用対象
説明
OraNumber
オブジェクトから数値引数を減算します。
使用方法
OraNumber.Sub operand
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] operand |
Variant 型の文字列、OraNumber 型または数値。
|
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
ラジアンで指定されたOraNumber
オブジェクトのタンジェントを計算します。
使用方法
OraNumber.Tan
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
OraTimeStamp
またはOraTimeStampTZ
オブジェクトからDate
型のコピーを戻します。
使用方法
Set date = OraTimeStampObj.ToDate Set date = OraTimeStampTZObj.ToDate
備考
このメソッドは、日時値をDate
データ型で戻します。その結果、日時値がVB日付の許容範囲外の場合は調整されます。
OraTimeStamp
オブジェクトの場合:
現行のOraTimeStamp
オブジェクトと同じ日時値の新規Date
オブジェクトを戻します。ただし、ナノ秒部分は切り捨てられます。
OraTimeStampTZ
オブジェクトの場合:
現行のOraTimeStampTZ
オブジェクトと同じ日時値の新規Date
オブジェクトを戻します。ただし、ナノ秒部分とタイムゾーン部分は切り捨てられます。
例
OraTimeStampオブジェクトの使用方法
Dim OraTimeStamp As OraTimeStamp ... 'Create OraTimeStamp using a string Set OraTimeStamp = OraSession.CreateOraTimeStamp("1999-APR-29 12:10:23.444 AM", _ "YYYY-MON-DD HH:MI:SS.FF AM") ' returns a Date type with date value set to "1999-APR-29 12:10:23 AM" ' note that the fractional part is dropped Set date = OraTimeStamp.ToDate
OraTimeStampTZオブジェクトの使用方法
Dim OraTimeStampTZ As OraTimeStampTZ ... 'Create OraTimeStampTZ using a string Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2000-12-28" & _ "12:10:23.444 -07:00", "YYYY-MM-DD HH:MI:SS.FF TZH:TZM") 'returns a Date type with date value set to "2000-12-28 12:10:23" 'note that Time Zone and nanosecond portions are dropped Set date = OraTimeStampTZ.ToDate
適用対象
説明
OraIntervalDS
オブジェクトが指定する日数の合計を表す値を含むOraNumber
オブジェクトを戻します。
使用方法
Set OraNumberObj = OraIntervalDSObj.ToOraNumber
適用対象
説明
現行のOraTimeStampTZ
オブジェクトの指定したタイムゾーンの日時値を持つOraTimeStamp
オブジェクトのコピーを戻します。
OraTimeStampTZ
オブジェクトからOraTimeStamp
オブジェクトのコピーを戻します。
使用方法
Set OraTimeStampObj = OraTimeStampTZObj.ToOraTimeStamp
備考
現行のOraTimeStampTZ
オブジェクトの指定したタイムゾーンの日時値を持つ新規OraTimeStamp
オブジェクトを戻します。
例
Dim OraTimeStampTZ As OraTimeStampTZ ... 'Create OraTimeStampTZ using a string Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2000-12-28" & _ "12:10:23.444 -07:00", "YYYY-MM-DD HH:MI:SS.FF TZH:TZM") 'returns a new OraTimeStamp object with date value equal to ' "2000-12-28 12:10:23.444" 'note that Time Zone portion is dropped Set OraTimeStamp = OraTimeStampTZ.ToOraTimeStamp
適用対象
説明
現行のOraTimeStampTZ
オブジェクトのセッション・タイムゾーンに正規化された日時値を持つOraTimeStamp
オブジェクトのコピーを戻します。
使用方法
Set OraTimeStampObj = OraTimeStampTZObj.ToOraTimeStampLTZ
備考
現行のOraTimeStampTZ
オブジェクトのセッション・タイムゾーンに正規化された日時値を持つ新規OraTimeStamp
オブジェクトを戻します。
例
Dim OraTimeStampTZ As OraTimeStampTZ ... 'Create OraTimeStampTZ using a string Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2003-APR-29" & _ "12:00:00 -07:00", "YYYY-MON-DD HH:MI:SS TZH:TZM") 'Assuming that the Session Time Zone is "-08:00" 'returns a new OraTimeStamp object with date value normalized to 'session Time Zone, "2003-APR-29 11:00:00" Set OraTimeStamp = OraTimeStampTZ.ToOraTimeStampLTZ ...
適用対象
説明
OraTimeStamp
オブジェクトからOraTimeStampTZ
オブジェクトのコピーを戻します。
使用方法
Set OraTimeStampTZObj = OraTimeStampObj.ToOraTimeStampTZ
備考
現行のOraTimeStamp
オブジェクトと同じ日時値の新規OraTimeStampTZ
オブジェクトを戻します。戻されたOraTimeStampTZ
オブジェクトのタイムゾーン情報は、セッション・タイムゾーンに設定されます。
例
Dim OraTimeStamp As OraTimeStamp ... 'Create OraTimeStamp using a string Set OraTimeStamp = OraSession.CreateOraTimeStamp("1999-APR-29" & _ "12:10:23.444 AM", "YYYY-MON-DD HH:MI:SS.FF AM") ' assuming that the session Time Zone is "-07:00" returns a new ' OraTimeStampTZ object with date value equal to "1999-APR-29 12:10:23 -07:00" Set OraTimeStampTZ = OraTimeStamp.ToOraTimeStampTZ
適用対象
説明
現行のOraTimeStampTZ
オブジェクトの協定世界時(UTC)に正規化された日時値を持つOraTimeStampTZ
オブジェクトのコピーを戻します。
使用方法
Set OraTimeStampTZObj1 = OraTimeStampTZObj.ToUniversalTime
備考
現行のOraTimeStampTZ
オブジェクトのUTCに正規化された日時値を持つ新規OraTimeStampTZ
オブジェクトを戻します。
注意: UTCは以前グリニッジ標準時と呼ばれていました。 |
例
Dim OraTimeStampTZ As OraTimeStampTZ Dim OraTimeStampTZ_UTC As OraTimeStampTZ ... 'Create OraTimeStampTZ using a string Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2003-APR-29 " & _ "12:00:00 -07:00", "YYYY-MON-DD HH:MI:SS TZH:TZM") 'returns a new OraTimeStampTZ object with date value normalized to 'UTC time, "2003-APR-29 19:00:00 00:00" Set OraTimeStampTZ_UTC = OraTimeStampTZ.ToUniversalTime ...
適用対象
説明
コレクションの最後から指定した数の要素を切り捨てます。
使用方法
OraCollection.Trim size
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] size |
切り捨てる要素の数を指定する整数。
|
備考
コレクションの最後から要素を削除します。現在のコレクションのサイズを超えるサイズを指定すると、エラーになります。
例
次の例では、Trim
メソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。
例: OraCollectionオブジェクトに対するTrimメソッド
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim EnameList as OraCollection 'create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from department set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&) 'retrieve a Enames column from Department. 'Here Value property of OraField object returns EnameList OraCollection set EnameList = OraDynaset.Fields("Enames").Value 'display the size of the collection msgbox EnameList.Size 'Trim the EnameList collection by one. Before that row level 'lock should be obtained OraDynaset.Edit EnameList.Trim 1 OraDynaset.Update 'display the new size of the collection msgbox EnameList.Size
適用対象
説明
LOBの値を短く切り捨てます。
使用方法
OraBlob.Trim NewLen OraClob.Trim NewLen
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] NewLen |
現在の長さ以下である必要がある、LOBの新しい長さを指定する整数。
|
備考
このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。
注意: Write やCopyFromFile など、LOBのメソッドを使用したLOBの操作では、古いデータと比較して新しいデータが短い場合、LOBオブジェクトは自動的に切り捨てられません。LOBオブジェクトを新しいデータのサイズに縮小するには、Trim (OraLOB)メソッドを使用します。 |
適用対象
説明
OraNumberを指定された小数位で切り捨てます。
使用方法
OraNumber.Trunc decplaces
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] decplaces |
小数点から右の桁数を指定して切捨て位置を示す整数。 負の値も指定可能で、小数点から左の桁数を示します。 |
備考
この操作の結果は、OraNumber
オブジェクトに格納されます。戻り値はありません。
適用対象
説明
このサブスクリプションの登録を解除し、特定のデータベース・イベントに関する通知をオフにします。
使用方法
orasubscription.UnRegister
備考
サブスクリプションの登録を解除すると、今後そのサブスクリプションまたはデータベース・イベントに関連する通知は送信されなくなります。通知を再開するには、そのサブスクリプションを再登録します。
例
データベース・イベントが通知されるようにアプリケーションを登録する例
「例: データベース・イベントが通知されるようにアプリケーションを登録する方法」を参照してください。
適用対象
説明
指定したダイナセットにコピー・バッファを保存します。
使用方法
oradynaset.Update oradynaset.DbUpdate
備考
Update
メソッドは、AddNew
またはEdit
操作を完了して、そのセッションでBeginTrans
操作が保留されていないかぎり、ただちに変更内容をデータベースにコミットします。
グローバル・トランザクション(つまり、BeginTrans
操作が発行済)内のダイナセットの所定の行でUpdate
メソッドをコールすると、CommitTrans
またはRollback
メソッドをコールするまで、選択した行がロックされたままになります。
ミラー化されたデータ・イメージも更新されるため、データの参照および更新を続行するために問合せを再評価する必要はありません。ミラー・イメージの更新に使用するメソッドは、このダイナセットのOraDatabase
オブジェクトを作成したOpenDatabase
メソッドに渡されたオプション・フラグによって決まります。
このダイナセットがデータ・コントロールに付加されている場合、データ・コントロール・コードのValidate
イベントで、必要に応じて、更新要求を取り消すことができます。更新が完了すると、ダイナセットに関連付けられているすべてのバインド済コントロールに更新内容が通知されるため、データの変更内容が自動的に反映されます。
例
この例では、AddNew
およびUpdate
メソッドを使用して、ダイナセットに新規レコードを追加する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object. Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 'Begin an AddNew. OraDynaset.AddNew 'Set the field(column) values. OraDynaset.Fields("EMPNO").Value = "1000" OraDynaset.Fields("ENAME").Value = "WILSON" OraDynaset.Fields("JOB").Value = "SALESMAN" OraDynaset.Fields("MGR").Value = "7698" OraDynaset.Fields("HIREDATE").Value = "19-SEP-92" OraDynaset.Fields("SAL").Value = 2000 OraDynaset.Fields("COMM").Value = 500 OraDynaset.Fields("DEPTNO").Value = 30 'End the AddNew and Update the dynaset. OraDynaset.Update End Sub
適用対象
説明
変更した参照可能オブジェクトをデータベースにフラッシュします。
使用方法
OraRef.Update
備考
Update
メソッドは、Edit
操作を完了し、セッションにBeginTrans
操作が保留されていないかぎりは、変更内容をデータベースにコミットします。
例
次の例では、データベースにあるPERSON
という参照可能オブジェクトの属性を更新します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。
属性値の更新: ダイナセットの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim OraDynaset as OraDynaset Dim Person as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create a dynaset object from customers set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&) 'retrieve a aperson column from customers. Here Value property of OraField 'object returns Person OraRef set Person = OraDynaset.Fields("aperson").Value 'locks the Person object in the server for modifying its attributes Person.Edit Person.Name = "Eric" Person.Age = 35 'Update method flushes the modified referenceable object in the server Person.Update
属性値の更新: パラメータの例
Dim OraSession as OraSession Dim OraDatabase as OraDatabase Dim Person as OraRef 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'create an OraParameter object represent Address object bind Variable OraDatabase.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, ORATYPE_REF,"PERSON" 'execute the sql statement which selects person from the customers table OraDatabase.ExecuteSQL ("BEGIN select aperson into :PERSON from customers" & _ "where account = 10; END;") 'get the Person object from OraParameter set Person = OraDatabase.Parameters("PERSON").Value 'locks the Person object in the server for modifying its attributes Person.Edit Person.Name = "Eric" Person.Age = 35 'Update method flushes the modified referenceable object in the server Person.Update
適用対象
説明
バッファをこのオブジェクトのBLOB
またはCLOB
値に書き込み、書込みデータ長の合計を戻します。
使用方法
amount_written = OraBlob.Write buffer, chunksize, piece amount_written = OraClob.Write buffer, chunksize, piece
引数
このメソッドの引数は、次のとおりです。
引数 | 説明 |
---|---|
[in ] buffer |
OraCLOB オブジェクトの場合は文字配列、ピースの書込み元のOraBLOB オブジェクトの場合はバイト配列。 |
[in ] [オプション] chunksize |
バッファの長さを指定するための整数。OraCLOB オブジェクトの場合は文字数、OraBLOB またはOraBFILE オブジェクトの場合はバイト数を示します。 デフォルト値は、バッファの引数のサイズです。 |
[in ] [オプション] piece |
バッファを書き込むピースを指定するための整数。 次の値を指定できます。
|
[out ] amount_written |
書込み量を表す整数。OraCLOB オブジェクトの場合は文字数、OraBLOB またはOraBFILE オブジェクトの場合はバイト数を示します。
|
備考
Write
メソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。このメソッドは、Offset
プロパティで指定されたオフセットからBLOB
データまたはCLOB
データを書き込みます。複数ピースの書込み操作の場合は、PollingAmount
プロパティを書込みデータ長の合計数の値に設定し、Status
プロパティをチェックして各ピースの操作が正常に実行されたことを確認する必要があります。合計数がわからない場合は、PollingAmount
プロパティを0
に設定できます。ピースの型がOraLob_piece
でないかぎり、ポーリングが発生します。
最後のピースの場合は、ピースの引数をORALOB_LAST_PIECE
に設定します。ポーリング量はバイト数または文字数で記述する必要があります。PollingAmount
プロパティが0(ゼロ)でない場合は、Write
操作を早期終了できません。
OraLOBのPollingamount
が0
で、OraLOBのWrite
のピースの型がORALOB_ONE_PIECE
でない場合は、ポーリングが引き続き発生します。ORALOB_LAST_PIECE
がWrite
メソッドへのコールの引数として送信されると、ポーリングが完了します。これは、OraCLOB.Write
メソッドを可変長キャラクタ・セットでコールする際、文字の合計数を事前にカウントすると負荷がかかる場合に便利です。
注意: Write やCopyFromFile など、LOBのメソッドを使用したLOBの操作では、古いデータと比較して新しいデータが短い場合、LOBオブジェクトは自動的に切り捨てられません。LOBオブジェクトを新しいデータのサイズに縮小するには、Trim (OraLOB)メソッドを使用します。 |
例
「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。
LOBの複数ピース書込みの例
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim PartDesc As OraClob Dim buffer As String Dim chunksize As Long Dim amount_written As Long 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Create the OraDynaset Object Set OraDynaset = OraDatabase.CreateDynaset("select * from part", 0&) Set PartDesc = OraDynaset.Fields("part_desc").Value chunksize = 32000 'Re adjust the buffer size buffer = String$(chunksize, 32) FNum = FreeFile 'Open the file. Open "partdesc.dat" For Binary As #FNum 'set the offset and PollingAmount properties for piece wise 'Write operation PartDesc.offset = 1 PartDesc.PollingAmount = LOF(FNum) remainder = LOF(FNum) 'Lock the row for write operation OraDynaset.Edit Get #FNum, , buffer 'Do first write operation amount_written = PartDesc.Write(buffer, chunksize, ORALOB_FIRST_PIECE) While PartDesc.Status = ORALOB_NEED_DATA remainder = remainder - chunksize If remainder < chunksize Then piecetype = ORALOB_LAST_PIECE chunksize = remainder Else piecetype = ORALOB_NEXT_PIECE End If Get #FNum, , buffer amount_written = PartDesc.Write(buffer, chunksize, piecetype) Wend Close FNum 'call Update method to commit the transaction OraDynaset.Update
LOBの単一ピース書込みの例
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim PartImage As OraBlob Dim buffer() As Byte 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 'Add PartDesc as an Output parameter and set its initial value. OraDatabase.Parameters.Add "PartImage", Null, ORAPARM_OUTPUT OraDatabase.Parameters("PartImage").ServerType = ORATYPE_BLOB 'Begin the transaction OraSession.BeginTrans 'Execute the statement returning 'PartDesc' OraDatabase.ExecuteSQL ("BEGIN select part_image into :PARTIMAGE" & _ "from part where part_id = 1 for update NOWAIT; END;") 'Get 'PartDesc' from Parameters collection Set PartImage = OraDatabase.Parameters("PartImage").Value 'Get a free file number FNum = FreeFile 'Open the file. Open "PartImage.Dat" For Binary As #FNum 'Re adjust the buffer size to hold entire file data ReDim buffer(LOF(FNum)) Get #FNum, , buffer 'Do one write operation amount_written = PartImage.Write(buffer) Close FNum MsgBox "Amount written to the LOB data is " & amount_written 'Ends the transaction OraSession.CommitTrans