こんばんは。悩めるプログラマーです。
ひょっとすると初歩的な事なのかもしれないのですが、
悩んでいるので教えてください。
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
>Accessの更新処理の終了判定なんかは
>取得できるのでしょうか?
コードをみる限り、更新処理をしているのは
AccessではなくADOなのですが・・・。
別プロセスにして、プロセスハンドルを取得すれば、
APIで待機できます。
>別プロセスにして、プロセスハンドルを取得すれば、
>APIで待機できます。
具体的にどのような処理をすればよいのでしょうか?
よろしければ教えていただけるとうれしいです。(^-^)
素人丸出しですみません。
VBから起動したプログラムが終了するまで待機(Wait)する(API)
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips053.htm
ADOに詳しい訳ではないですけど。
非同期実行であるのなら。
完了前でレポート出力のロジックへ進むと言う事は考えられます
非同期実行による更新であるのなら
Private WithEvents AdoResp As ADODB.Connection
上記定義などでADOのコネクションより
クエリーの完了イベント(ExecuteComplete)にて通知されているのでは?