- PR -

ともこ

1
投稿者投稿内容
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2008-10-03 13:49
いつもお世話になります。

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

For文などのループ処理中にユーザーのクリックイベント等が起きると、画面が「応答なし」となりホワイトアウトしてしまいます。この場合、For文中に「DoEvents」を記述するとWindowsに処理が移動し、「応答なし」を回避できることを知りました。

アプリケーションからストアドを実行し、データ取得まで時間がかかった場合も上記と同様に「応答なし」となるケースがあります。この場合、For文などのループ処理とは異なり処理中に「DoEvents」を書く事ができません。(下記参照)

'処理
 コネクション作成
  ↓
 ストアドプロシージャ指定
  ↓
  Set RS = cmd.Execute ← ここでデータ取得に時間がかかり、応答なしとなる
  ↓
 If RS.EOF then
  exit sub
  end if

このように処理がFor文以外の場合には、「DoEvents」のように「応答なし」を回避する事はできないのでしょうか?

どなたか良い方法をご存知の方はアドバイスをお願いします。
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2008-10-03 13:55
すみません、間違ってタイトルに名前を記入してしまいました。

件名は、「DoEvents処理について」です。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-03 15:01
引用:

ともこさんの書き込み (2008-10-03 13:49) より:

For文などのループ処理中にユーザーのクリックイベント等が起きると、画面が「応答なし」となりホワイトアウトしてしまいます。この場合、For文中に「DoEvents」を記述するとWindowsに処理が移動し、「応答なし」を回避できることを知りました。


あまり気軽に Interaction.DoEvents 関数を使わない方が良いです。

引用:

このように処理がFor文以外の場合には、「DoEvents」のように「応答なし」を回避する事はできないのでしょうか?


VB6 では同じプロセスとなると (フツーの方法では) できません。 プロセスを分けてそちらで実行してもらうのが無難でしょう。 今回はストアド プロシージャなので、仕様次第ではプロシージャ自体を細分化するという手段が取れるかもしれません。 そもそも時間のかかるストアド プロシージャが問題ですね。

引用:

すみません、間違ってタイトルに名前を記入してしまいました。
件名は、「DoEvents処理について」です。


編集で件名も修正できますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-10-03 15:08
#編集機能裏付けしてたら先越された・・・

一応非同期実行は可能です。
cmd.Execute , , adASyncExecute

もろもろ確認してませんので、ご注意を。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-03 15:16
引用:

nakaPさんの書き込み (2008-10-03 15:08) より:

一応非同期実行は可能です。
cmd.Execute , , adASyncExecute


お、非同期実行できる引数があったのですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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