Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


22536 / 76734 ←次へ | 前へ→

【59578】ADO RecordSet.UpDateのタイムラグについて
質問  みそじのおじさん  - 08/12/23(火) 16:33 -

引用なし
パスワード
   毎度お世話になっております。

現在、EXCEL,ADO,ACCESSを用いて、車の整備会社で、顧客管理、請求書・見積書作成、
部品管理、売上管理などをするものを作成しております。EXCELをユーザーインターフェースとして使用(Excel自体にデータを保存しない)しています。

 顧客の中には、車を複数台所有してる方が多いので顧客データを表示するユーザーフォ
ームに、所有する車名を表示するComboBoxを配置しております。車名を選択すると同フォ
ーム内にある車検証データを表示するTextBox群にその車の車検証データが表示されるようになっています。

 
その車が廃車になった時の処理を一例としてあげると、

Dim CN as New ADODB.Connection
Dim Res as New ADODB.RecordSet
Dim SQL as String

SQL="select * from T_車検証マスタ where F_顧客ID =" & ID & " AND F_車名 ='"
  & strCarName & "' ;"

Res.Open SQL, CN, adOpenKeyset, adLockOptimistic

If Not Res.EOF then
 .... 
 ....
 Res.Fields(F_車台番号).Value = Null
 ....
 ....

End If

このような感じで該当フィールドにNullを代入しています。
通常削除する場合、Res.Deleteですが訳あって、Nullを代入しております。
(テーブルの設計ミスです。リレーションで他のデータが消えてしまうので...)

この後

Res.UpDate をして

Call Control_Refresh(引数省略)

車検証データを表示するTextBox群のリフレッシュをするSubを呼んでいます。


/////////////////////////////////////////////////////////
Sub Control_Refresh(引数省略)

'Res.Fields(****).ValueがNULLならテキストボックスを空に、
'Nullでないなら、その値を表示する。

 .....
 .....

 If IsNull(Res.Fields(F_車台番号).Value)=False Then 'ここにブレークポイント設置
   TextBox1.Clear
 Else
   TextBox1.Text=Res.Fields(F_車台番号).Value
 End If

 .....
 .....
End Sub

/////////////////////////////////////////////////////////

このプログラムを実行すると、ブレークを張ってない場合に
IF IsNull(Res.Fields(F_車台番号).Value)=False の部分がFalseですり抜けてしまう場合がありあます。

ブレークを張って見ていると、止まった瞬間はRes.Fields(F_車台番号).ValueにNullを代入する前の車台番号が入っていて、その後、1秒ほどしてからNullになるといった具合
でした。

 Res.UpDateをしてから、実際にRecordSetがNullになるまでには、タイムラグがあるのでしょうか?(あって当たり前のような気がしていますが...)今はその場しのぎで、Application.Wait Now()+TimeValue("00:00:02")を入れて対応していますが、2秒という数字は環境によってまちまち(私のテスト環境では2秒で大丈夫ですが、本番の環境はPC2台のネットワークで使用しますので、条件が悪くなるかもしれません)だと思いますので、この待ち方はできれば回避したいです。
 
  Excel+ADO+Accessにおける待ちの常套手段とは、どういったものなのでしょうか?
アドバイス頂けると幸いです。よろしくお願い致します。
 

テスト環境 会社のPC Excel2003 Access2000 OS Xp RAM128MBのロースペックPC
      待ちをいれなくてもFalseですり抜ける事はありません。
      主にこちらで作成しているので、自宅でやるまで気づきませんでした。

テスト環境 自宅のPC Excel2003 Access2000 OS Vista CORE 2Quo 4GB
      待ちを入れないとかなりの確立ですり抜けます。

本番の環境 2台のPC共に、Excel2003 OS Xp Accessはインストールされていません
       LANケーブル接続
      ネットワークフォルダに1つのmdbファイルを置いて、それぞれのPCの  
      excelファイルからADOで接続して同時に使用します。

3 hits

【59578】ADO RecordSet.UpDateのタイムラグについて みそじのおじさん 08/12/23(火) 16:33 質問
【59579】Re:ADO RecordSet.UpDateのタイムラグにつ... neptune 08/12/23(火) 19:25 発言
【59590】Re:ADO RecordSet.UpDateのタイムラグにつ... みそじのおじさん 08/12/24(水) 12:05 発言
【59604】Re:ADO RecordSet.UpDateのタイムラグにつ... neptune 08/12/24(水) 17:19 発言
【59610】Re:ADO RecordSet.UpDateのタイムラグにつ... みそじのおじさん 08/12/25(木) 8:28 お礼
【59612】Re:ADO RecordSet.UpDateのタイムラグにつ... neptune 08/12/25(木) 10:37 発言
【59617】Re:ADO RecordSet.UpDateのタイムラグにつ... みそじのおじさん 08/12/25(木) 19:23 お礼

22536 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free