- PR -

adAsyncExecuteについて

1
投稿者投稿内容
のりちゃん
会議室デビュー日: 2007/09/19
投稿数: 15
投稿日時: 2008-10-06 13:23
いつもお世話になります。

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 」でエラーを回避するようないい方法を
ご存知の方がいらっしゃいましたら是非ご教授下さい。
どなたか良い方法をご存知の方はアドバイスをお願いします。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-10-06 14:08
ConnectionオブジェクトのExecuteCompleteイベントを使用してください。
のりちゃん
会議室デビュー日: 2007/09/19
投稿数: 15
投稿日時: 2008-10-06 14:16
nakaP様ご返信ありがとうございます。

>ConnectionオブジェクトのExecuteCompleteイベントを使用してください。
ExecuteCompleteは自分のほうでもうまく利用できないものかと
おもって念頭にはかんがえていたのですが、どのように記述していいのか
分からず、こちらの方法はあきらめておりました。
よろしければ、具体的な記述をご教授いただけないでしょうか??
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-06 14:43
引用:

のりちゃんさんの書き込み (2008-10-06 14:16) より:

ExecuteCompleteは自分のほうでもうまく利用できないものかと おもって念頭にはかんがえていたのですが、どのように記述していいのか分からず、こちらの方法はあきらめておりました。よろしければ、具体的な記述をご教授いただけないでしょうか??


イベント プロシージャの用意の仕方がわからないだけみたいですね。 VB6.0 であれば WithEvents キーワードを使ってイベント ハンドラを紐付けるだけですね。

コード:

Private WithEvents Connection As ADODB.Connection

Private Sub Connection_ExecuteComplete( _
    ByVal RecordsAffected As Long, _
    ByVal pError          As ADODB.Error, _
    ByRef adStatus        As ADODB.EventStatusEnum, _
    ByVal pCommand        As ADODB.Command, _
    ByVal pRecordset      As ADODB.Recordset, _
    ByVal pConnection     As ADODB.Connection _
)
    //ToDo: ここにコードを追加
End Sub


こんな感じだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
のりちゃん
会議室デビュー日: 2007/09/19
投稿数: 15
投稿日時: 2008-10-06 15:27
じゃんぬねっと様ご回答の方、ありがとうございます。
ご意見を参考にヘルプなどを調べてみたのですが、初心者なもので
うまく記述できません。

図々しく申し訳ないのは承知ですが、
よろしければ、詳細をご教授願いたいのですが・・・。
   
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-06 16:01
引用:

のりちゃんさんの書き込み (2008-10-06 15:27) より:

じゃんぬねっと様ご回答の方、ありがとうございます。
ご意見を参考にヘルプなどを調べてみたのですが、初心者なもので
うまく記述できません。

図々しく申し訳ないのは承知ですが、
よろしければ、詳細をご教授願いたいのですが・・・。


私は先にも書いているとおり "イベント プロシージャの用意の仕方がわからないだけ" だと思って回答しています。 ですので '何が' わからないのかを明示して頂かないと満足な回答ができない可能性が高いです。

変数名からして 'cmd' は ADODB.Command ですよね。 それと紐づいている ADODB.Connection の変数があるハズです。 その ADODB.Connection の変数の代わりとして私のコードにある 'Private WithEvents Connection...' を使うだけです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-10-06 16:22
cmd.Executeの戻り値は無視してください。
結果のRecordsetはExecuteCompleteイベントのpRecordsetで取得できます。

クエリなどを実行するプロシジャ(cmd.Executeを実行するところ)と結果を取得するプロシジャ(ExecuteComplete)が別になりますので、使用する変数の宣言場所(Connection,Commandなど)に注意してください。
1

スキルアップ/キャリアアップ(JOB@IT)