tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルadAsyncExecuteについて
記事No13094
投稿日: 2008/10/06(Mon) 14:33
投稿者のりこ
いつもお世話になります。

VB6.0でSQLサーバー2000へアクセスしデータを取得するアプリケーションの開発を行っています。

ストアド実行に時間がかかってしまい、実行中にクリックなどユーザー側に
されると、画面が固まったようになるのを防ぐ為下記のような処理で
adAsyncExecuteを指定し固まるのを防ぐようにコーディングしたのですが
非同期実行の為直後の「If RS.EOF then 」にてエラーとなってしまいます。


'処理
 コネクション作成
  ↓
 ストアドプロシージャ指定
  ↓
  Set rs = cmd.Execute(, , adAsyncExecute)
  ↓
 If RS.EOF then    ← エラーとなる
  exit sub
 end if
  ↓
Do Until rs.EOF
処理
Loop

直後の「If RS.EOF then 」でエラーを回避するようないい方法を
ご存知の方がいらっしゃいましたら是非ご教授下さい。
どなたか良い方法をご存知の方はアドバイスをお願いします。

[ツリー表示へ]
タイトルあちらで解決済ですか?
記事No13095
投稿日: 2008/10/06(Mon) 14:57
投稿者ダンボ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46682&forum=36
マルチポストですわね。

[ツリー表示へ]
タイトルRe: あちらで解決済ですか?
記事No13097
投稿日: 2008/10/06(Mon) 15:25
投稿者のりこ
すいません。
VB初心者かついち早く回答を得たい為投稿させていただきました。
本当にもうしわけございません。。。

ただまだ解決に至っておりません。ExecuteCompleteイベントの記述の方法の
ヒントをいただいているのですが、どのようにすればいいのかわかりません。。。

もしよろしければ、ご教授いただきたいのですが。。。

[ツリー表示へ]
タイトルRe^2: あちらで解決済ですか?
記事No13099
投稿日: 2008/10/06(Mon) 15:51
投稿者るしぇ
> VB初心者かついち早く回答を得たい為投稿させていただきました。
VB初心者かついち早く回答を得たいなら、掲示板のルールを無視しても
いいと言っているのですか?

注意事項をよく読んでから投稿願います。

[ツリー表示へ]
タイトルRe: adAsyncExecuteについて
記事No13100
投稿日: 2008/10/06(Mon) 15:53
投稿者魔界の仮面弁士
>   Set rs = cmd.Execute(, , adAsyncExecute)
>   ↓
>  If RS.EOF then    ← エラーとなる
>   exit sub
>  end if

それらを一つのプロシージャに纏めてはいけません。イメージコードでいうと、
http://support.microsoft.com/default.aspx/kb/229799/ja
のように記述するべきです。


たとえば、処理開始のプロシージャ――Sub Command1_Click()等――では、
単に Execute メソッドを adAsyncExecute 指定で呼ぶ、ただそれだけです。

この時点では、戻り値を変数 rs に拾っておく必要はありませんし、
rs.EOF を判断する必要もありません。Execute 後は直ちに Exit Sub するだけです。


その Execute 呼び出し後、しばらくすると ExecuteComplete イベントが発生するので、
rs.EOF などのデータの取得処理はそのイベント内で行います。このイベントには、
先ほどの Execute adAsyncExecute 指定で使われた Connection や、その結果となる
Command や Recordset 等が引数として渡されてくるので、それらの引数を使って
 If pRecordset.EOF Then
などとして利用する事ができます。

[ツリー表示へ]