Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1167 / 2272 ツリー ←次へ | 前へ→

【8475】レコードソースに重いSQLを設定するとフォームにデータが表示されない katie 06/8/17(木) 13:33 質問[未読]
【8477】Re:レコードソースに重いSQLを設定すると... 小僧 06/8/17(木) 14:33 発言[未読]
【8479】Re:レコードソースに重いSQLを設定すると... katie 06/8/17(木) 16:30 お礼[未読]

【8475】レコードソースに重いSQLを設定するとフォ...
質問  katie  - 06/8/17(木) 13:33 -

引用なし
パスワード
   フォーム上でユーザーに検索条件を指定させ、検索ボタンが押されたらサブフォームに検索結果を表示するプログラムを作っています。

開発環境は Access2002/SQL-Server2000 です。

検索ボタンが押されたところで動的にSQL文を生成して String型変数 str_sql にセットし

    Me.クライアント検索sub.Form.RecordSource = str_sql
    Me.クライアント検索sub.Form.Requery

以上のコードを実行させています。

これでほとんどの検索は問題なくできるのですが、SQL文が重たいもの(クエリアナライザで実行して40秒くらいかかる)になると処理がうまくいかなくなります。検索結果が1行しか表示されず、その1行もデータがすべて「#Name?」という表示です。

SQL-Serverから取得したデータをサブフォームに表示させるところでタイムアウトしているのかな?と思うのですが、どう修正したらいいか分からずにいます。

connectionがタイムアウトしないようにすればよいのかと思い、
Me.クライアント検索sub.Form.RecordSource = str_sql と
Me.クライアント検索sub.Form.Requery の前に
connection.CommandTimeout = 300 を入れてみたのですが状況は変わりませんでした。

お知恵をお借りできませんか。

【8477】Re:レコードソースに重いSQLを設定すると...
発言  小僧  - 06/8/17(木) 14:33 -

引用なし
パスワード
   ▼katie さん:
こんにちは。

お力になれるかは解りませんが…。


当方は Access2003、SQLServer2005でシステムを作成していますが、
お客様が同一のレコードを更新する事がほぼない、といった条件ですので
ワークテーブルを用いて処理を行っています。

検索条件を入れて実行ボタンを押すと動的にSQLが生成されるまでは
katie さんと変わらないのですが直接レコードソースにするのではなく、

SQLはワークテーブルへのInsert文になっており、
サブフォームのレコードソースがワークテーブルになっています。

ExeuteメソッドにおいてSQL文を発行しているため同期がとれ
結果取得に時間が掛かった場合でも特に表示も問題ありません。


まずは事象の切り分けとして、Requeryメソッドとの
同期が取れているかを確認されてみてはいかがでしょうか。

60秒くらいの無駄なループを作るか、
Requery用のコマンドボタンを別に設けるのが近道でしょうか。

【8479】Re:レコードソースに重いSQLを設定すると...
お礼  katie  - 06/8/17(木) 16:30 -

引用なし
パスワード
   ▼小僧 さん:

アドバイスありがとうございます!

ワークテーブルを使うという方法をさっそく試させていただきました。

重いSQL文をExecuteメソッドで実行して結果をワークテーブルに書き込み⇒サブフォームのレコードソースにワークテーブルを指定

この方法でうまくいきました!ありがとうございます!!

↓こちらも試してみました。
>まずは事象の切り分けとして、Requeryメソッドとの
>同期が取れているかを確認されてみてはいかがでしょうか。
>
>60秒くらいの無駄なループを作るか、
>Requery用のコマンドボタンを別に設けるのが近道でしょうか。

Me.クライアント検索sub.Form.RecordSource = str_sql の後に無駄なループを入れてみましたが、状況は変わらず #Name! のエラーデータが表示されました。

Requery を別ボタン処理にしてみても #Name! のエラーデータが表示されたので、
RecordSource プロパティのところでタイムアウトしているのでは?と思いました。RecordSource でのタイムアウト(?)を防ぐ方法はないのでしょうか・・?

とりいそぎワークテーブルで回避する方向で進めます。

1167 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078222
(SS)C-BOARD v3.8 is Free