人に聞けない痔の悩み、これでスッキリ >>

MS_ACCESS2000を使用し、何万件とある
データから、クエリを使用してデータを
抽出したりしているのですが、データが出力
されるまでにやたらと時間がかかります。

そこで、今、処理全体のどのぐらいまでおわっているかを
メータかなにかで表示できないものでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

それはちょっと(少なくとも私には)無理ではないかと思います。



進行状況をあらわすメータ(プログレスバー)は、その処理の内容が把握できないとプログラムを書くことはできません。
この場合は、クエリの処理を自力で書く(プログラミングする)必要があります。

職業プログラマの方なら話が違うのでしょうが、、、、

この回答への補足

ありがとうございます。
やっぱり難しいんですね。

ありがとうございます。

補足日時:2003/06/20 22:12
    • good
    • 0

 処理の時間をプログレスバー表示させるにはVBスクリプトを使用すればできるでしょうが、(Microsoft Common Dialog Control ver6.0以上)それよりも速度がやたらと遅いほうに何かあると思います。


 一つのクエリーの抽出条件にあれもこれも一度に書き込んでいませんか?
 グループ分けのクエリーを作ってさらに、そこから抽出条件のクエリーを作れば、そんなに時間はかかりませんけど、
 25,000件のデータから毎日、数百件を抽出、印刷する作業をしていますが、テーブル一つにクエリーは100以上作っています。増えすぎて削除することも必要になってきているくらいです。処理速度の問題は全くありませんが、初期の頃は、抽出条件が複雑すぎて途中で止まることもよくありました。
 作り方を変えることでかなり早くなりますので、その方が早道と思います。
 Excelだと20,000件も入れたら重すぎて作業にならないとおもいますよ。
 Lotus123で5,000件が限界でした。
 Accessに替えて良かったと思っています。
 プログレスバーについては自信なしです。
    • good
    • 0
この回答へのお礼

6万件のデータを紐付けしているので、
どうしても遅くなってしまいます。。

情報ありがとうございました。

お礼日時:2003/06/20 22:12

クエリの実行中は、画面左下のステータスバーに進行状況が表示されますよね。



・・・そういうことではなくて?

クエリの実行速度が気になるようでしたら、検索対象のフィールドにインデックスをつけると、こころもち速くなります。

この回答への補足

あ、ステータスバーが非表示に。。

これをポップアップウィンドウかなにかで
表示させることは可能ですか。

無理いってすいません

補足日時:2003/06/13 11:38
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessで処理経過を表示したいのですが

Accessでcsvデータを自動的に読み込み、テーブルに追加するマクロを作成したのですが、読み込むcsvファイルの数も容量も大きいため時間がかかります。(数分)
このため、マクロの処理中はフリーズ状態となりタイトルバーに(応答無し)と出てしまう場合があります。
そこで、ポップアップダイアログのようなものを表示させて途中経過を表示させたいのですが良い方法はないでしょうか。

Aベストアンサー

マクロではどうするのかは不明ですが、モジュールでは、DoEvents 関数を使ってオペレーティング システムに制御を渡す事が可能です。

長らくAccessを使ってないので、あってるか自信が無いのですが・・・
DoCmd.OpenForm "処理中メッセージ"
Forms("処理中メッセージ").text.Value = "処理1実行中"
DoCmd.RepaintObject acForm, "処理中メッセージ"
DoEvents
処理1・・・
Forms("処理中メッセージ").text.Value = "処理2実行中"
DoCmd.RepaintObject acForm, "処理中メッセージ"
DoEvents
処理2・・・
 ・
 ・
DoCmd.Close acForm, "処理中メッセージ"
DoCmd.OpenForm "処理終了メッセージ"
な感じかな?

実際には、フォームへのテキスト代入からDoEventsをサブにして、テキストも複数用意して、履歴を見えるようにして・・・
Forms("処理中メッセージ").text4.Value = Forms("処理中メッセージ").text3.Value
Forms("処理中メッセージ").text3.Value = Forms("処理中メッセージ").text2.Value
Forms("処理中メッセージ").text2.Value = Forms("処理中メッセージ").text1.Value
Forms("処理中メッセージ").text1.Value = "処理1実行中"
DoCmd.RepaintObject acForm, "処理中メッセージ"
DoEvents
で、テキストはフォントを段々と小さくしていくと、流れてるように見えるかも・・・

マクロではどうするのかは不明ですが、モジュールでは、DoEvents 関数を使ってオペレーティング システムに制御を渡す事が可能です。

長らくAccessを使ってないので、あってるか自信が無いのですが・・・
DoCmd.OpenForm "処理中メッセージ"
Forms("処理中メッセージ").text.Value = "処理1実行中"
DoCmd.RepaintObject acForm, "処理中メッセージ"
DoEvents
処理1・・・
Forms("処理中メッセージ").text.Value = "処理2実行中"
DoCmd.RepaintObject acForm, "処理中メッセージ"
DoEvents
処理2・・・...続きを読む

QACCESSでのプログレスバー表示について

ACCESSでのプログレスバー表示をしようと考えています。
EXCELでは別フォームでのプログレスバー表示ができたのですが、
ACCESSではうまくいきません。

Web上でのサンプルも同一画面内でのプログレスバー表示でMeを使うものばかりです。
別画面でフォームを表示して制御することはACCESSでできるのでしょうか?

Aベストアンサー

Private Sub コマンド5_Click()
On Error GoTo Err_コマンド5_Click
  Dim I As Integer

  DoCmd.OpenForm "Test", , , Null
  For I = 1 To 100
    Forms("Test").Controls("ProgressBar").Value = I
    Pause 0.1
  Next I
  DoCmd.Close acForm, "Test"
Exit_コマンド5_Click:
  Exit Sub
Err_コマンド5_Click:
  MsgBox Err.Description
  Resume Exit_コマンド5_Click
End Sub

これは、フォーム"Test"をオープンし0.1秒毎に進捗度表示を更新し10秒後に閉じるコードです。同様のやり方で目的は達成出来ると思います。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessでテーブル名やクエリ名一覧の抜き出し

Accessでテーブルやクエリを沢山(100個以上?)使っております。

そこで、テーブル名やクエリ名の管理をしたいので、テーブル名(クエリ名)の一覧を抜き出したいのですが、どうすればいいのでしょうか?
または、そういうことは無理なのでしょうか??(;O;)

1個づつコピーペーストでテールブル名をエクセルに貼り付けて行こうかな?と思ったのですが、さすがに数が多すぎるので困っております。

できるだけ簡単な方法がいいのですが、もしなければVBAでもいいです。

おわかりの方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

・クエリを新規作成
・以下SQLを貼り付け
SELECT MSysObjects.Type, MSysObjects.Name, MSysObjects.Flags
FROM MSysObjects
ORDER BY MSysObjects.Type, MSysObjects.Name;
・デザインビューで表示
あとは、TypeとFlagsの条件を変えてあげれば一覧できます。

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング