備考
Edit
メソッドでは、ローカルにキャッシュされたデータがOracle Databaseの対応する行と比較されます。Oracle Databaseのデータが、参照中のデータと同じでない場合は、エラーが生成されます。この操作が成功すると、行は"SELECT
...
FOR
UPDATE"
文を使用してロックされ、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