投稿日 | : 2004/11/08(Mon) 11:37 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: UpdateとUpdateBatchの違い |
> If FILE_N = ks![ファイル名] Then
> ks.Fields("確認日") = Date & " " & Time
ks![ファイル名]
ks.Fields("確認日")
二つの記法が混在していますね。どちらかに統一された方が良いですよ。
なお、処理速度的には、
ks.Fields("確認日").Value
と書いた方が良いようです。Valueプロパティを書くのが面倒なら、
ks.Collect("確認日")
とも書けます。
> ks.Fields("確認日") = Date & " " & Time
Date関数、Time関数は、ともに 日付型の値を返します。
文字列型の値ではありませんので、&演算子での連結は推奨されません。
(この記法では、コントロールパネルの設定によって、結果が異なってしまいます)
日付型を文字列型に変換したい場合は、たとえば、
〜 = Format(Now(), "yyyy\/mm\/dd hh\:nn\:ss")
などのように、Format関数を併用するようにしてください。
> 今までは、”Update” を使用してソフトを作成していたのですが、上手く更新されません。
mdbファイルを更新する際は、Connectionオブジェクトの BeginTrans/CommitTransメソッドを使って
トランザクションを明示的に利用するようにしてください。
BeginTrans/CommitTransが使われなかった場合、mdbへのデータの反映が、
最長で 0.5秒間ほど遅延する可能性があります。(レジストリ設定によりますけど)
> UpdateBatchにすると上手く更新されるみたいです。
編集/追加後、Updateを呼び出さずに、UpdateBatchを呼び出した場合、内部で自動的に
Updateメソッドが呼び出され、その後、UpdateBatchが呼ばれる事になります。
(と、ヘルプに書いてありますよ)
> そこで、質問なのですが、UpdateとUpdateBatchの違いは何でしょうか?
複数行に対する更新を、一度に「バッチ更新」するために使うための物です。
Updateが「Recordset内のデータの更新」を行うのに対して、UpdateBatchは、
「Recordsetの内容を、実際のデータベースに反映させる」ために使われます。
バッチ更新モードでは、UpdateBatch メソッドを呼び出すまで、1行または複数行の
レコードに対する変更を、ローカルにキャッシュしておく事ができます。そして、
UpdateBatchを呼ぶ事で、キャッシュされた情報を反映させる事ができます。
なお、バッチ更新モードは、adLockOptimisticモードではなく、
adLockBatchOptimisticモードにて使います。また、カーソルタイプが、
adOpenKeyset または adOpenStatic の時にのみ使用可能となります。
なお、UpdateとUpdateの違いは、「adUseClient」モードで使った際に謙虚になります。
バッチ更新を使う事で、adUseClientではオフラインでの更新が可能となっています。
たとえば、データを取得後、データベースとの接続を切り離しておき、
Recordsetに対して削除/追加更新処理を加えてから、最後に
データベースと再接続して UpdateBatch を行うような事ができます。
ただし Jet では、バッチ更新が完全にはサポートされていないため、
2行以上のデータを一度に UpdateBatch しようとすると失敗します。