Excel VBA質問箱 IV

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

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


22622 / 76820 ←次へ | 前へ→

【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で接続して同時に使用します。

10 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 お礼

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