Accessの更新状態の取得するには?


悩めるプログラマー  2002-03-18 15:07:30  No: 75398  IP: [192.*.*.*]

こんばんは。悩めるプログラマーです。
ひょっとすると初歩的な事なのかもしれないのですが、
悩んでいるので教えてください。

VB6 SP5, Access2000, CrystalReports8.5という
開発環境です。(ADOを使用しています)

  帳票を印刷するためにAccessにワークテーブルを予め
作成しておいてそのテーブルに印字するデータを書き出
し、そいつをCrystalReportsで読み込んで印刷をしよう
としています。ところが処理が速すぎるせいかどうかは
わからないんですけどプレビュー画面が真っ白!!
  「なんでやねん?!」と思いAccessを徐に開いてみると
ワークテーブルにはしっかり書き込まれているではないで
すか!不思議に思い、CrystalReportsのActionプロパティ
の前で3秒ほど止めて見ました。すると上手い事出力され
ます。ひょっとしてAccessの更新処理が終わる前にCrystal
Reportが動いてるのかな?と思っています。
  そこで質問です。Accessの更新処理の終了判定なんかは
取得できるのでしょうか?現在使用中のコードを書きます
のでどなたかご存知の方教えてください。お願いします。

<<< コードです >>>
Private Sub Command1_Click()
    Cnn.Execute("Delete From w_Table")    'ワークテーブル削除

    '----- ここで印字するデータをReadしてワークテーブルに
    '      書き込んでます。
    mySQL = "Select * From t_Data" 〜

    Set rs = Cnn.Execute(MySQL)

    ワークをオープンして書き込んでます。

    '----- 3秒ほど止めています。この処理がないと上手くいきません。
    Dim st As Single

    st = Timer
    Do While Timer - st < 3
        DoEvents
    Loop

    CrystalReport1.Action = 1    '印刷実行
End Sub

編集 削除
Say  2002-03-19 10:33:48  No: 75399  IP: [192.*.*.*]

>Accessの更新処理の終了判定なんかは
>取得できるのでしょうか?

コードをみる限り、更新処理をしているのは
AccessではなくADOなのですが・・・。

別プロセスにして、プロセスハンドルを取得すれば、
APIで待機できます。

編集 削除
悩めるプログラマー  2002-03-19 11:51:20  No: 75400  IP: [192.*.*.*]

>別プロセスにして、プロセスハンドルを取得すれば、
>APIで待機できます。

具体的にどのような処理をすればよいのでしょうか?
よろしければ教えていただけるとうれしいです。(^-^)

素人丸出しですみません。

編集 削除
Say  2002-03-19 12:27:33  No: 75401  IP: [192.*.*.*]

VBから起動したプログラムが終了するまで待機(Wait)する(API)
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips053.htm

編集 削除
マザー  2002-03-19 16:32:04  No: 75402  IP: [192.*.*.*]

ADOに詳しい訳ではないですけど。
非同期実行であるのなら。
完了前でレポート出力のロジックへ進むと言う事は考えられます
非同期実行による更新であるのなら
Private WithEvents AdoResp As ADODB.Connection
上記定義などでADOのコネクションより
クエリーの完了イベント(ExecuteComplete)にて通知されているのでは?

編集 削除