この章では、Oracle Data Controlのプロパティについて説明します。データ・コントロール・の概要は、「Oracle Data Control」を参照してください。
関連項目: 詳細は、Microsoft Visual Basicのヘルプおよびマニュアルを参照してください。 |
内容は次のとおりです。
次の各プロパティは、OraDynaset
オブジェクトおよびOracle Data Controlに適用されます。
適用対象
説明
ユーザーが、Data ControlのMoveLast
ボタンを使用して最後のレコードに移動可能かどうかを決定します。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.AllowMoveLast = [True | False]
備考
デフォルトでは、AllowMoveLast
はTrue
です。この場合、最後のレコードへの移動に非常に時間がかかる可能性がある場合でも、レコードの移動に関するユーザーの制限はありません。
AllowMoveLast
がFalse
の場合、Data ControlのMoveLast
ボタンは、グレー表示になっており無効です。ただし、最後のレコードに到達した(ユーザーがセットの終わりまで移動したか、コード上で最後のレコードを指すレコード・ポインタに位置付けられたため)後は、ボタンは有効です。これによりユーザーは、問合せ全体がフェッチされているかどうかについて視覚的なフィードバックを得られます。このプロパティをFalse
に設定した場合でも、MoveLast
メソッドは使用できます。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
データ型
Integer
(ブール)
適用対象
説明
データベース・オブジェクト・パラメータの自動バインディングを実行するかどうかを決定します。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.AutoBinding = [ True | False
備考
デフォルトでは、AutoBinding
はTrue
です。この場合、OraParameters
コレクションのパラメータは、データ・コントロールのリフレッシュ前(SQL文が実行される前)に、RecordSource
プロパティのSQL文にバインドされます。技術的に言えば、パラメータはレコードセットの再作成時に再バインドされます。
Autobinding
のFalse
設定は、RecordSource
プロパティのSQL文を再バインドして再実行する必要がある場合にのみ、有効になります。単にパラメータ値を変更してデータ・コントロールをリフレッシュする場合、または単にレコードセットをリフレッシュする場合(SQL文は再実行のみが必要)は該当しません。RecordSource
プロパティを変更してSQL文を変更する場合は該当します。
このプロパティは、パラメータを含まないSQL文の実行時にすべてのパラメータのバインディングを無効にする場合にも使用します(CreateDynaset
、Refresh
またはExecuteSQL
を使用)。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後(および該当条件が適用された後)に有効になります。このプロパティへの変更は、recordset.Refresh
が実行される場合は無効です。
データ型
Integer
(ブール)
例
この例では、AutoBinding
の使用方法と、データ・コントロールおよびレコードセットのリフレッシュに与える影響を示します。このコードをoradata1
という名前のOracle Data Controlを含む新規フォームの定義セクションにコピーし、その後、[F5]を押して実行します。
Sub Form_Load () 'Set the username and password. oradata1.Connect = "scott/tiger" 'Set the databasename. oradata1.DatabaseName = "ExampleDb" 'Refresh the data control without setting the RecordSource. This has the 'effect of creatingthe underlying database object so that parameters 'can be added. oradata1.Refresh 'Set the RecordSource and use a SQL parameter for job. oradata1.RecordSource = "select * from emp where job = :job" 'Add the job input parameter with initial value MANAGER. oradata1.Database.Parameters.Add "job", "MANAGER", 1 'Add the deptno input parameter with initial value 10. oradata1.Database.Parameters.Add "deptno", 10, 1 'Refresh the data control. oradata1.Refresh MsgBox "Employee #" & oradata1.Recordset.fields("empno") & ", Job=" & _ oradata1.Recordset.fields("job") 'Only employees with job=MANAGER will be contained in the dynaset. 'Turn off Automatic parameter binding. oradata1.AutoBinding = False 'Change the value of the job parameter to SALESMAN. oradata1.Database.Parameters("job").Value = "SALESMAN" 'Refresh ONLY the recordset. oradata1.Recordset.Refresh MsgBox "Employee #" & oradata1.Recordset.fields("empno") & ", Job=" & _ oradata1.Recordset.fields("job") 'The query will still execute even with AutoBinding=False 'because the dynaset has not been re-created. 'Set the RecordSource and use a SQL parameter for deptno. oradata1.RecordSource = "select * from emp where deptno = :deptno" On Error GoTo paramerr 'Attempt to refresh the data control. An error should occur, because ' AutoBind=False, the SQL statement contains a parameter, and the 'SQL statement needs to be bound before execution. oradata1.Refresh Exit Sub paramerr: MsgBox oradata1.Database.Session.LastServerErrText Exit Sub End Sub
適用対象
説明
データ・コントロールをOracleデータベースに接続するときに使用されるユーザー名およびパスワード。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.Connect = [ username/password
備考
この文字列は、コントロールがリフレッシュされるときにOraSession
オブジェクトのOpenDatabase
メソッドに渡されます。このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
データ・コントロールをリフレッシュしても、Connect
プロパティが指定されていない場合は、リフレッシュは失敗します。
有効なConnect
プロパティの例は次のとおりです。
"scott/tiger" "system/manager"
データ型
String
適用対象
説明
データ・コントロールに関連付けられているOraDatabase
オブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。
使用方法
oradatabase = oradata1.Database
備考
データ・コントロールがリフレッシュされていない場合に、このプロパティを参照すると、オブジェクト変数が設定されていませんというランタイム・エラーが発生します。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
データ型
OLEオブジェクト(OraDatabase)
適用対象
説明
データ・コントロールをOracleデータベースに接続するときに使用されるOracle SQL*Net指定子プロパティ。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.DatabaseName = [ DatabaseName ]
備考
このOracle SQL*Net指定子には、Oracle SQL*Netプロトコル識別子、Oracleデータベース名、およびオプションのデータベース・インスタンスを含める必要があります (SQL*Netの別名も使用できます)。この文字列は、コントロールがリフレッシュされるときにOraSession
オブジェクトのOpenDatabase
メソッドに渡されます。このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
データ・コントロールをリフレッシュしても、DatabaseName
プロパティが指定されていない場合は、リフレッシュは失敗します。
有効なDatabaseName
プロパティの例は次のとおりです。
"t:oracle:PROD" "p:Oracle10:demo" "x:orasrv" "mydbalias"(Where mydbalias represents "t:mfg:prod")
データ型
String
適用対象
説明
Update
およびDelete
で、読取り一貫性をチェックするかどうかを決定します。
使用方法
oradata1.DirtyWrite = [ True | False ]
データ型
Integer
(ブール)
備考
デフォルトでは、DirtyWrite
はFalse
です。つまり、基となるレコードセット/ダイナセット・オブジェクトに対するUpdate
およびDelete
操作では読取り一貫性が維持されます。このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
適用対象
説明
現在の行の現在の編集状態を戻します。設計時には使用できません。実行時は読取り専用です。
使用方法
edit_mode = oradata1.EditMode
備考
使用可能なEditMode
プロパティ値は次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORADATA_EDITNONE |
0 |
現在編集中ではありません。 |
ORADATA_EDITMODE |
1 |
既存行に対して編集が進行中です。 |
ORADATA_EDITADD |
2 |
新規レコードを追加中のため、コピー・バッファは現在、データベース内の実際の行を表していません。 |
これらの値はoraconst.txt
ファイル内にあり、Visual Basicのoraconst.txt
ファイル内にある類似の定数と一致するようになっています。
このプロパティは、Edit
、AddNew
およびUpdate
メソッドからのみ影響を受けます。
データ型
Integer
適用対象
説明
コントロール配列内のコントロールを一意に識別する番号を指定します。コントロールがコントロール配列の一部である場合のみ、設計時に使用できます。実行時は読取り専用です。
適用対象
説明
デフォルトでは、NoRefetch
はFalse
です。つまり、Oracle Databaseで設定するデフォルトのデータ・セットは、ローカル・キャッシュへ再フェッチされません。 ORADB_NO_REFETCH
オプションがTrue
の場合、デフォルトでは、基となるレコードセットまたはダイナセットは、このプロパティを継承します。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
使用方法
oradata1.NoRefetch = [ True | False ]
データ型
Integer
(ブール)
適用対象
説明
データベース、およびデータ・コントロールに関連付けられているすべてのダイナセットについて1つ以上の特性を決定します。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.Options = database_optionsdatabase_options = oradata1.Options
データ型
Long
Integer
備考
このプロパティは、データベースのオプションのモードを設定するために使用されるビット・フラグ文字です。 options = 0の場合、デフォルトの設定が適用されます。使用可能なモードは次のとおりです。
列デフォルト・モード
デフォルト・モードは、VBモードです。VBモードでは、AddNew
またはEdit
の使用時、明示的に設定されていないフィールド(列)値はNULL
に設定されます。
オプションで、Oracleモードも使用できます。Oracleモードでは、フィールド(列)への変更は、データベースからその変更行を取得することでローカル・ミラーに即時反映されます。これにより、Oracle Databaseで列にデフォルトを設定し、必要な計算を実行できます。列デフォルト・モードは、AddNew
およびEdit
メソッドの動作に影響します。
ロック待機モード
デフォルト・モードは、待機モードです。待機モードでは、ダイナセット行の変更を試行すると(Edit
を使用)、データベースの既存行が、SQL "SELECT
...
FOR
UPDATE"
文を使用して取得され、その行はデータベースでロックされます。変更される行がすでに他のプロセス(またはユーザー)によってロックされている場合、"SELECT
...
FOR
UPDATE"
文は、その行のロックが解除されるまで待機してから処理が実行されます。
オプションで、非待機モードも使用できます。非待機モードの場合、更新対象行がロックされていることを示すエラー・コードが即時に戻されます。
ロック待機モードは、ExecuteSQL
を使用して処理されるSQL文にも影響します。
再フェッチなしモード
このモードでは、ORADB_ORAMODE
の場合と同様、NULL
は明示的に挿入されません。 ORADB_NO_REFETCH
モードでは、データがローカル・キャッシュに再フェッチされないため、パフォーマンスが向上します。
Optionsプロパティのフラグ値
Options
プロパティのフラグ値は次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORADB_DEFAULT |
&H0& |
デフォルトの動作を使用します。 |
ORADB_ORAMODE |
&H1& |
Oracle Databaseによるデフォルトのフィールド(列)値の設定を許可します。 |
ORADB_NOWAIT |
&H2& |
SQLの"SELECT ... FOR UPDATE" 文の実行時、行ロックで待機はしません。 |
これらの値は、oraconst.txt
ファイルにあります。オプションは、それぞれの値を追加することで組み合せることができます。
このプロパティは、OpenDatabase
メソッドに渡されるオプションと同じです。OpenDatabase
の場合と同様、これらのオプションは、OraDatabase
オブジェクト、およびそのデータベースから作成された関連ダイナセットすべてに影響します。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
適用対象
説明
フィールド(列)への変更が、データベースからその変更行を取得することによって、ローカル・ミラーに即時反映されるかどうかを決定します。これにより、Oracleで列にデフォルトを設定し、必要な計算を実行できます。
使用方法
oradata1.OracleMode = [ True | False ]
データ型
Integer
(ブール)
備考
このプロパティ値は、デフォルトではTrue
に設定されます。つまり、フィールド(列)の変更は、即時にローカル・キャッシュに反映されます。このプロパティ値への変更は、Refresh
メソッドの起動後に有効になります。 データベース・オプションとしてORADB_ORAMODE
モードが使用される場合、基となるレコードセット/ダイナセットはこのモードを継承します。
適用対象
説明
読取り専用の操作にダイナセットを使用するかどうかを決定します。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.ReadOnly = [ True | False ]
データ型
Integer
(ブール)
備考
デフォルトでは、ReadOnly
はFalse
です。つまり、データベースからROWID
を選択すると、更新可能なダイナセットの作成が試行されます。ReadOnly
がTrue
に設定されている場合、更新不可能なダイナセットが作成され(ROWID
はデータベースから選択もキャッシュもされません)、操作は多少速くなります。
SELECT
文にLONG
またはLONG
RAW
列が含まれている場合は、ダイナセットが更新可能かどうかに関係なく、ROWID
が必要です。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
適用対象
説明
データ・コントロールのConnect
、DatabaseName
およびRecordSource
プロパティによって定義されたダイナセットを戻します。設計時には使用できません。実行時に読取り/書込みができます。
使用方法
Set oradynaset = oradata1.RecordsetSet oradata1.Recordset = Oradynaset
データ型
OLEオブジェクト(OraDynaset
)
備考
このダイナセットのプロパティおよびメソッドは、他のダイナセット・オブジェクトの場合と同じです。Oracle Data Control(.OCX
)のRecordset
プロパティは、外部のダイナセット、すなわち別のデータ・コントロールのRecordsetプロパティに設定できます。この設定を行った後、Oracle Data ControlのDatabase、SessionおよびOptionsのプロパティが、外部ダイナセットの対応するプロパティに設定されます。Oracle Data Controlでは、外部ダイナセットのアドバイス・オブジェクトが共有されます。これは、CreatePlsqlDynaset
メソッドでPL/SQLカーソルから戻されたダイナセットを添付する場合に役立ちます。
例
この例では、CreatePlsqlDynaset
メソッドで作成された外部ダイナセットに対するRecordset
プロパティの設定を示します。この例では、PL/SQLカーソルを、DEPTNO
パラメータの様々な値を含む外部ダイナセットとして戻します。対応するストアド・プロシージャ(EMPCUR.SQL
にある)が、Oracle Databaseから利用可能であることを確認してください。このコードを、oradata1
という名前のOracle Data Controlを含むフォームの定義セクションにコピーします。次に[F5]を押します。
Sub Form_Load () 'Declare variables as OLE Objects. 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&) ' Now attach the Oradynaset to Data control's recordset. set oradata1.recordset = OraDynaset ... ' Do some operation ... ' Now set the deptno value to 20 OraDatabase.Parameters("DEPTNO").Value = 20 'Refresh the sqlstmt Oradata1.recordset.Refresh 'Remove the parameter. OraDatabase.Parameters.Remove ("DEPTNO") End Sub
適用対象
説明
データ・コントロールのRecordSet
を作成するために使用されるSQL SELECT
文。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.RecordSource = [ SQL SELECT Statement ]
データ型
String
備考
SQL文は、SELECT
文である必要があります。そうでない場合は、エラーが戻されます。表、ビュー、シノニム、列の別名、スキーマ参照、表の結合、ネストされたSelect文、およびリモート・データベース参照などの機能は自由に使用できます。どの方法でもオブジェクト名は変更されません。
結果のダイナセットが更新可能かどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびReadOnly
プロパティによって決まります。更新可能にするには、次の3つの条件を満たす必要があります。
SQL文が単純な列リストまたは列リスト全体(*)を参照すること。
SQL文でオプション引数の読取り専用フラグを設定しないこと。
Oracleで、問合せで選択された行へのROWID参照を許可していること。
これらの条件を満たさないSQL文でも処理されますが、その結果は更新可能ではなく、ダイナセットのUpdatable
プロパティでFalse
が戻されます。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。
SQLのバインド変数は、OraParameters
コレクションと組み合せて使用できます。
このプロパティがNULL
または空の場合、OraDynaset
オブジェクトは作成されませんが、データ・コントロール用にOraSession
、OraConnection
およびOraDatabase
オブジェクトが作成されます。この動作により、ダイナセットの作成の前に、これらのオブジェクトへのアクセスが可能になります。たとえば、NULL
RecordSource
を使用し、データベース・オブジェクトをインスタンス化してパラメータを追加できます。その後、RecordSource
プロパティを、データベース・パラメータの自動バインディングを使用して実行時に設定できます。
このプロパティの変更およびRecordSet
プロパティのRefresh
メソッドのコールにより、新規のダイナセット・オブジェクトが作成されますが、古いダイナセットも、そのダイナセットへの参照がすべて削除されるまで、引き続き使用できます。
例
この例では、データ・コントロールのRecordSource
プロパティのSQLバインド変数(パラメータ)の使用方法を示します。この例を実行するには、oradata1
という名前のデータ・コントロールを含むフォームの定義セクションにコードをコピーし、その後[F5]を押します。
Sub Form_Load () 'Set the username and password. oradata1.Connect = "scott/tiger" 'Set the databasename. oradata1.DatabaseName = "ExampleDb" 'Refresh the data control without setting the ' RecordSource. This has the effect of creating ' the underlying database object so that parameters may be added. oradata1.Refresh 'Set the RecordSource and use a SQL parameter. oradata1.RecordSource = "select * from emp where job = :job" 'Add the job input parameter with initial value MANAGER. oradata1.Database.Parameters.Add "job", "MANAGER", 1 'Refresh the data control. 'Only employees with the job MANAGER will be contained in the dynaset. oradata1.Refresh 'Change the value of the job parameter to SALESMAN. oradata1.Database.Parameters("job").Value = "SALESMAN" 'Refresh ONLY the recordset. 'Only employees with the job SALESMAN will be contained in the dynaset. oradata1.Recordset.Refresh End Sub
適用対象
説明
データ・コントロールに関連付けられているセッション・オブジェクト。設計時には使用できません。実行時は読取り専用です。
使用方法
orasession = oradata1.Session
データ型
OLEオブジェクト(OraSession
)
備考
このプロパティは、oradata1.Database.Session
の参照と同等です。データ・コントロールがリフレッシュされていない場合に、このプロパティを参照すると、オブジェクト変数が設定されていませんというランタイム・エラーが発生します。
適用対象
説明
データベースから取得された文字列データから、後続のブランクを取り除くかどうかを決定します。設計時および実行時に読取り/書込みができます。
使用方法
oradata1.TrailingBlanks = [ True | False ]
データ型
Integer
(ブール)
備考
デフォルトでは、TrailingBlanks
はFalse
です。つまり、データベースから取得された文字列データから後続のブランクが取り除かれます。
このプロパティへの変更は、Refresh
メソッドがデータ・コントロールに送信された後に有効になります。