アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access2000でBtrieveファイル(PervasiveSQLV8)を更新するVBAを作成したのですが、コマンドボタンで実行し
処理をながすとエラーが発生します。
エラー個所を特定するためにステップイン等で実行すると、
エラーは発生せず正常に処理が終了します。
全ての関数にOnErrorGotoをつけてみたのですが、
そのエラーが発生するときは、なぜかOnErrorGotoにひっかかりません。
何かよい方法はありませんでしょうか?

A 回答 (1件)

Btrieveを使用したことがある者です。


10年近く昔の頃だということもあり、結構曲者でした。

さてさて、エラーメッセージがどのようなものか解れば
もう少し深い推測もできますが、

・ステップインではエラーは発生しない。
・OnErrorGotoに引っかかってくれない。

という現状からですと

1.エラーの発生は処理速度と何らかの因果関係がある。
2.OnErrorGotoはエラー発生時のジャンプ先を宣言するだけであり、
  飛んだ先に何も処理が無いので単純にスルーしている。可能性有り?

のような材料が取り出せます。

でてくる推測は
  「処理の実行速度が速すぎるため、Btrieve側の処理が追いつかない。
   そのためVBAからの処理要求に対して『対応不能』の意味合いの
   エラーを返している。」
というものです。

 VBA側はシングルスレッドでもBtrieve側がマルチスレッドだと
 発生しうります。

 [VBA]オープンして [Btrieve]オープンするよ(と返事して、どっこいしょ・・・)
 [VBA]じゃあ読んで [Btrieve]わぁ、まだ無理ぃ~~(エラーー!)
みたいなイメージでしょうか。

この材料から導かれる解決手順は、

1.全てのOnErrorGotoで飛んだ先にデバッグ用のダイアログ表示をいれる。
  エラーの発生場所を掴むのが目的なので、AだBだとユニークなものを
  表示させるものでOK。
2.コンマンドボタンを押下することで通過する処理を全てコメントにする。
  (なので、一番最初は押しても無反応な状態となる。)
3.コメントを少しずつ解除していきながら疑わしき場所を狭めていく。
  (この時、ステップインで実行してはいけない。)
4.いざBtrieveが悲鳴をあげた時はOnErrorGotoが捕まえる
  (1.でいれたダイアログが表示される)はずなので、
  今度はその部分が影響しない範囲のコメントを解除していく。
  そのためOnErrorGotoに関連するコーディングはしっかりしておくこと。
4-1.Btrieveの処理が影響してコメント解除しにくい場合は、
   ・・・実行(F5?)とステップ実行(F8?)とブレークポイント(F9?)
   を駆使して可能な限り捜索範囲を狭めていく。。。しかない。。。
5.実行速度だけの問題ならばSleepなどで対処する。
  そうでないなら、、、さらに細かい情報を集めて
   1・Btrieveのメーカーに問い合わせ。
   2・改めてOKWeb(もしくは「教えてGoo」)する。
   3・Btrieveの使用をあきらめる。
   4・AccessからではなくVBからアクセスするようにする。
  などなど

でしょうか。

デバッグモードとリリースモードの違いではエリア破壊の微妙な影響が
質問のような動きの違いとなることもありますが、
はたしてVBAでそのような事が発生するかどうかまでは。。。

続報お待ちしております。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なかなか奥の深い問題のようですね・・・
今はちょっと時間がなくて調べられませんが、
時間があるときちょっと試してみようと思います。
詳しく回答して頂きましてありがとうございました。

お礼日時:2005/02/23 19:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!