ヘッダーをスキップ
Oracle® Objects for OLE開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B58887-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CreateDynasetメソッド

説明

指定した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&を指定すると、次のデフォルトがダイナセットに指定されます。
  • データベースのVisual Basicモードのように動作します。明示的に設定されていないフィールド値はNULLに設定され、データベース列のデフォルトは上書きされます。

  • データベース・パラメータの自動バインディングを実行します。

  • データベースから取り出された文字列データから、後続するブランクが削除されます。

  • 更新可能なダイナセットを作成します。

  • クライアント上でデータをキャッシュします。

  • ダイナセットの作成時にMoveFirstが強制的に実行されます。

  • 読取りの一貫性を保持します。

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を強制的に実行しない。BOFEOFは両方とも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オブジェクトの複数のコンテキストで実行される複数のコマンドが、データベースのコミット済データの同一スナップショットで操作できるようになります。

この例では、CreateObjectOpenDatabaseおよび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