使用方法
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