VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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 しようとすると失敗します。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -