アクセスでクエリーを実行すると、上記の警告が発生しクエリーがとまってしまいます。
tmpファイルのことかな?と考え、ディスクのクリーンアップは行いましたが、状況はかわりません。
もともと正常に作動するアクセスのファイルをコピーしまして、そのなかのクエリーのひとつを少々変更して実行しているのですが、コピーをしなおしたりしても、上記の警告が必ず発生します。(コピー元やその他のファイルは正常に作動します)
原因がわからず困っております。宜しくお願い申し上げます。
当方W98 アクセス95、です。
No.6ベストアンサー
- 回答日時:
じゃあそろそろ最後にしようかな。
基本的な話をしましょう。
検索条件になっている項目についてはインデックス(索引)があるかないかによって検索する件数が異なってきます。
5万件あるデータに関して現在のような検索をすると5万件全て検索します。
ですからインデックスを作成して等しいか(=)という判断条件にすることによって検索する件数を最小限にすることが出来ます。
但しインデックスをつけると追加や更新の速度が遅くなります。
またジョインは大きな表を作ることになりますのでその為メモリを大量に消費します。
このためメモリ消費を押さえる為、ジョインはできるだけ少なくするとか、事前に必要分だけワークテーブルに格納してからジョインするとかの対策をとります。
プログラムを作ってねと言う意味(VBAで良いですよ)
またWindwows98ですよね。メモリは64Mか128M程度かなと予測しますが、これでは非常に危険ですね。そもそもwindows98系はメモリの使い方が下手なので大量データを扱うには向いていないのです。
だから件数とファイルサイズを聞いたのです。2回目の回答の参考URLはご覧になりました?いや実際壊れたら目も当てられない状況になりたくないならバックアップ&まともなDBMSにすることをお勧めします。
それはさて置き
追加件数が125000ですよね。ベースになるテーブルは47000件ですので増加されていますよね。
125000件×31項目×20バイト(平均項目のバイト数)とすると77.5MB程度の作業領域が必要になりますね。実際にはこれより多かったりしますがいいのですかこんなに毎月増えて?
また経験から実メモリの2倍から3倍のスワップファイルサイズになるような場合は非常に不安定な状況になります。
ここから質問&回答タイム
ykkw_2001>確信はないですが、クエリ式がこれだけ長くなると、SQLサーバーに渡すときとかヤバくないかな?なんてね
ところでyukiko5さんSQLServeなんてお使いなのですか?
そういった記述はないのでDBはAccess95だと思っているのですが...
yukiko5>軽くする(という表現があっているかはわかりませんが)
あってますよ。
yukiko5>なんだか全部ちからワザ
いや1回きりのものならそういうのもありなのですが毎月使うようなものでかつデータ量が増えるような場合はやっぱり力技だけでなく技がいりますね。
yukiko5>問題は解決しましたが、すっきりしません。
ykkw_2001>M$の製品はそういうのが多いですね。
ykkw_2001> 「ゲイツ病」と言うそうです。
いやはや全くその通りですね。頭が痛いですね。いつものことだから諦めています。これもMs製品との付き合い方一つです。
お暇ならこのサイトで過去質問をみるのもいいでしょう。
最後に
ykkw_2001>手元にAccess97 しかないので確認取れませんが、以前のAccessでクエリ実行後、MDBに残りカスが蓄積されていったことがあります。
トランザクションログ周りですかねこれは削除/更新をすると作業中の内容を覚えておき、何かあったときに戻せるようにする仕組みが働くのでこの関係かな。Access2000では閉じる時に最適化が出来るようになりましたね。
それではMSのサイトや各種参考書を片手にがんばってよいものを作ってください。
>基本的な話をしましょう。
ありがとうございました。とても参考になりました。
>2回目の回答の参考URLはご覧になりました?
はい。ちょっと怖くなりました。
バックアップはこまめにとっております。
>いいのですかこんなに毎月増えて?
この請求明細にかんしてだけは、
月ごとのファイルを別々にしておりますので、大丈夫です。
(じゃナゼ請求月を検索しているのか?
ムダに思えますが、私の前任者の趣味のようでして、
ほとんどそういう方式をとっているようです。
慎重といえば慎重なのですが。。。)
>ところでyukiko5さんSQLServeなんてお使いなのですか?
>DBはAccess95だと思っているのですが...
使ってません。意味もわかってませんでした。
アクセスは95です。
ちなみにVBAも未開の地です。今後開拓したいです。
>>軽くする(という表現があっているかはわかりませんが)
>あってますよ。
ありがとうございます。
>やっぱり力技だけでなく技がいりますね。
今回、皆様の指摘により痛感しました。
軽くする工夫から始めたいと思います。
>サイトや各種参考書を片手にがんばってよいものを作ってください。
長々とお付き合い頂きまして、本当にありがとうございました。
No.7
- 回答日時:
おこんばんわ、ykkw_2001です。
#でも、yukiko5さんは、朝か・・・
>ykkw_2001さんのご意見も
と言われるほどのものはないです。
>全部ちからワザで、えいやー!
で、できてしまうのが、Accessのいいとこで、悪いとこでもありますね。
>47000件です。
>最終的に125000件
ぐえ。
そらあんさん、「えいやー!」って、やり過ぎでっせ。
>ほかにもコレ級のファイルがちらほらありまして、、、
Win98で!!
おめでとう。レコード件数では、私の知る限り最高記録達成です。
勇者の称号と栄光を授けます。
んで。
要は、yanmaaさんのおっしゃるような対策ですな。
とりあえずローテクな私としては、
>事前に必要分だけワークテーブルに格納してから
てのが、おすすめです。
指針としては、
いっぱいJOINされている中心的なテーブルから、該当する請求月のレコードだけのテーブルを一時的に作成する。必要なフィールドだけね。
そのテーブルに各マスタから、何段階かに分けて、必要なフィールドをつけてゆく。
最後に請求明細に追加。かな。
できれば、別の一時的なMDBファイル上でやりたいです。
#SQL全部見てませんけど
相当遅くなると思いますが、「落ちる」よりはいいでしょう。
あとは、
>バックアップ
ぜぇーったい、やりましょうね。
#やってなかったら、「勇者」から「挑戦者」に格上げします。
>まともなDBMSにする
Oracleあたりでも、大丈夫なのかなぁ。
yanmaaさん江
>トランザクションログ周りですかね
嗚呼、そーだったんかぁ。
>Access2000では閉じる時に最適化が出来るようになりましたね。
おお、こいつぁいいことを教えてもらった。
ありがとうございます。
#回答欄にお礼を書いたんは初めてですわ。
でわ、健闘を祈ります。
>おこんばんわ、ykkw_2001です。
おはようございます。おっはー。
>そらあんさん、「えいやー!」って、やり過ぎでっせ。
自分の無謀さに初めて気が付きました。
皆さんのご指導を元に、今後はちゃんと工夫します。反省。。。
>バックアップ
#やってなかったら、「勇者」から「挑戦者」に格上げします。
なんかちょっと「おしかったな~」思っている自分にパンチ!
社内データですから挑戦しちゃいけないですよね。
もちろん、無謀な挑戦者なんて、いけないですよね。
>でわ、健闘を祈ります。
本当に長々とお付き合いいただきまして、ありがとうございました。
No.5
- 回答日時:
これは大抵テンポラリファイルが大きくなりすぎた為でしょう。
ですからNo2は取り合えず気にしなくて結構です。SQL文を見ると追加クエリのようですね。
「請求明細(西日本)」テーブルから各種マスタテーブルに各種情報を付加するクエリですね。
この結果を請求書明細データに追加しているようですね。
ここで問題になってくるのは「請求明細(西日本)」のテーブルに登録されている件数です。数件や1万件程度なら問題ないですが件数が多くなるとトランザクションログといわれるファイルが膨大になり処理時間も遅くなります。
またMDBのサイズが100MBという事はかなり大きなDBだと思います。参考URLも参考にして下さい。
最後にクエリのWHERE (((Left([請求日],6))=[【請求月】])) は条件ですが、Left関数を使っておりますので該当テーブルを全件検索しています
これもテンポラリファイルを増大させる要因です。
元のテーブルに請求年月というフィールドを追加し、インデックスをつけ(重複あり)このフィールドで条件にしましょう。
該当テーブルにデータ登録時は請求日と請求年月に同時に書き込み検索時は請求年月を検索する。
請求年月は請求日の左6桁とします。
旧のデータは更新クエリで請求年月=LEFT(請求日,6)で更新しておきましょう。
参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=146304
>SQL文を見ると
はい。そうです。
>「請求明細(西日本)」のテーブルに登録されている件数
47000件です。
追加される「請求明細データ」は最終的に125000件になります。
処理時間もPCが新しくなってからは30秒くらいで終わるので、
ファイルの大きさなどはまったく気にしておりませんでした。
ほかにもコレ級のファイルがちらほらありまして、、、
ちょっと件数をお伝えするのが恥ずかしかったです。
>WHERE (((Left([請求日],6))=[【請求月】])) は条件ですが
軽くする(という表現があっているかはわかりませんが)
工夫が必要なんですね。
こうして教えていただいて、自分の作成したクエリーを見直してみると、
なんだか全部ちからワザで、えいやー!とやっているようなのばかりみたいです。
今後の課題として精進していこうと思います。
No4に記入したように、ykkw_2001さんのご意見も聞いてみたく思います。
締め切りは絶対にしますので、少々お待ちいただければと思います。
(遅くても明日には締め切るようにいたします)
かなり面倒なことにもかかわらず、ご丁寧にご指導いただきまして、
本当にありがとうございました。
No.4
- 回答日時:
>107506KBです。
完成するとその1.5倍くらいになります。手元にAccess97 しかないので確認取れませんが、以前のAccessでクエリ実行後、MDBに残りカスが蓄積されていったことがあります。具体的には、データを増やしていないのに実行を重ねるとファイルサイズが大きくなっていきました。(最適化後で比較しました)
で、MDBが大きくなると、「クエリ式が適当でない」とか、「テーブルが不正だ」とかとんでもないイチャモンを付け出して、良く分からんまま、MDBを分割すると解決してしまいました。
サイズからして、分割を検討されたらいかがかなと思いました。
>>INSERT INTO 請求明細データ ・・・・
確信はないですが、クエリ式がこれだけ長くなると、SQLサーバーに渡すときとかヤバくないかな?なんてね。
私なら、アスタリスク(*)をうまく使うとか、何段階かのテーブル作成クエリに分割して途中経過のテンポラリテーブルを作るとか、あれこれやりたくなる状況です。
>問題は解決しましたが、すっきりしません。
M$の製品はそういうのが多いですね。
「ゲイツ病」と言うそうです。
>上記の件だけで原因を特定するのは非常に難しいかと思いますが、
yanmaaさんのご意見を伺いたいとこですね。
ひとまず、解決をお慶び申し上げます。
>サイズからして、分割を検討されたらいかがかなと思いました。
完成したら200000KBになってしまいました。
多分もとのデータのテーブルが大きいだけだと思います。
クエリーやその他のテーブルは多くないのです。
分割するには少々頭をひねらなければ。。。。
>何段階かのテーブル作成クエリに分割して
確かに分割した方が、後々もわかりやすいですよね。
実はもうちょっとすっきりしたクエリーにしたく、
その前段階の変更をしてみたところ、この事態に陥りました。
>yanmaaさんのご意見を伺いたいとこですね。
yanmaaさんのご意見はいかがでしたでしょうか?
なにかykkw_2001さんからもあるかと思い、
締め切りしないでちょっと待ってみます。
よろしければ書込みお願い申し上げます。
>ひとまず、解決をお慶び申し上げます
ありがとうございました。
No.3
- 回答日時:
No2の補足について
MS-DOSプロンプトを起動してSETと入力してEnterします。
そうすると環境変数の一覧が表示されるので
TEMP=なにがし
という行があります。
デフォルトなら
TEMP=C:\WINDOWS\TEMP
となっているかと思います。
これが環境変数の[TEMP]のことです。
ここまでが前置きで次に本題に入ります。
下記の質問に対して補足願います。
注意:作業はバックアップを取ってから行いましょう。
1.AccessのMDBファイルのサイズはどの位でしょうか?
2.MDBの最適化を行っても現象は変わらないでしょうか?
3.修正したと言うクエリーだけが該当メッセージを出すのでしょうか?
4.MDBの修復を行っても現象は変わらないでしょうか?
5.3で他のクエリー及び元のクエリーに戻した時は正常に動いたならば修正後のクエリーを提示してください。
テーブルの構成もお願いします。
まあこの程度かなまだあるような気もしますが
クエリーはデザインビューを開き[表示]-[SQLビュー]を選択して下さい。そこに表示されている内容をカット&ペーストして下さい。
この回答への補足
おはようございます。丁寧なご指導ありがとうございました。
ただ申し訳ないのですが、なんとか動くようになりました。
どうしてだかは不明です。
いろいろこちらでも試行錯誤を重ねているうちに、
「JOIN式が一致しない」というメッセージまで出てきてしまい、
やっとその意味がわかり訂正したところ、動きました。
テンポラリファイルじゃないの???
と、少々憤慨ですが、結果オーライとすることにしました。
お付き合い頂いておりました皆々様には大変申し訳ございません。
一応yanmaaさんの補足要求の結果をお知らせします。
>MS-DOSプロンプト
C:\WINDOWS>set
TMP=c:\windows\TEMP
TEMP=C:\windows\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
COMSPEC=C:\WINDOWS\COMMAND.COM
PATH=C:\WINDOWS;C:\WINDOWS;C:\WINDOWS\COMMAND;D:\SKYNEC
windir=C:\WINDOWS
BLASTER=A220 I5 D1 T4 P330
以上です。読取専用なのかどうかはわかりませんでした。
>1.AccessのMDBファイルのサイズはどの位でしょうか?
107506KBです。完成するとその1.5倍くらいになります。
2.MDBの最適化を行っても現象は変わらないでしょうか?
>変わりませんでした。
3.修正したと言うクエリーだけが該当メッセージを出すのでしょうか?
>データ元のみ違って、クエリーの型が同じものがあと2つあるのですが、
それらについては同じ結果でした。
違う型のクエリーは作動しました。
4.MDBの修復を行っても現象は変わらないでしょうか?
>変わりませんんでした。
5.3で他のクエリー及び元のクエリーに戻した時は正常に動いたならば修正後のクエリーを提示してください。テーブルの構成もお願いします
>INSERT INTO 請求明細データ ( 請求月, 部コード, 部名, 部門コード, 部門名, 営業担当者コード, 担当者名, 取引先コード, 得意先名, 現場コード, 現場名, 請求日, 行No., 日付, 品種コード, 品種名, 商品コード, 品名, 規格, 区分, 数量, 返却数, 日数, 単価, 金額, 摘要, 期間Pe, 期間T, 伝票No., 加算区分, 締日更新区分 )
SELECT DISTINCTROW Left([請求日],6) AS 請求月, 部マスタ.部コード, 部マスタ.部名, 得意先マスタ西日本.部門コード, 部マスタ.部門名, 得意先マスタ西日本.営業担当者コード, 担当者マスタ.担当者名, 請求明細(西日本).得意諠Rード, 得意先マスタ西日本.得意先名, 請求明細(西日本).現場コード, [Q:現場マスタ(西日本)].現場名, 請求明細(西日本).請求日, 請求明細(西日本).行No., 請求明細(西日本).日付, 商品マスタ.品種コード, 品種マスタ.品種名, 請求明細(西日本).商品コード, 商品マスタ.品名, 商品マスタ.規格, 請求明細(西日本).取引区分, 請求明細(西日本).数量, 請求明細(西日本).返却数, 請求明細(西日本).日数, 請求明細(西日本).単価, 請求明細(西日本).金額, 請求明細(西日本).摘要, 請求明細(西日本).期間FROM, 請求明細(西日本).期間TO, 請求明細(西日本).伝票No., 請求明細(西日本).加算区分, 請求明細(西日本).締日更新区分
FROM (((請求明細(西日本) LEFT JOIN 商品マスタ ON 請求明細(西日本).商品コード = 商品マスタ.商品コード) LEFT JOIN 品種マスタ ON 商品マスタ.品種コーh = 品種マスタ.品種コード) LEFT JOIN ((得意先マスタ西日本 LEFT JOIN 担当者マスタ ON 得意先マスタ西日本.営業担当者コード = 担当者マスタ.担当者コード) LEFT JOIN 部マスタ ON 得意先マスタ西日本.部門コード = 部マスタ.部門コード) ON 請求明細(西日本).得意先コード = 得意先マスタ西日本.取引先コード) LEFT JOIN [Q:現場マスタ(西日本)] ON (請求明細(西日本).現場コード = [Q:現場マスタ(西日本)].現場コード) AND (請求明細(西日本).得意先コード = [Q:現場マスタ(西日本)].得意先コード)
WHERE (((Left([請求日],6))=[【請求月z]))
ORDER BY 得意先マスタ西日本.部門コード, 得意先マスタ西日本.営業担当者コード, 請求明細(西日本).得意先コード, 請求明細(西日本).現場コード, 請求明細(西日本).行No.;
これでよろしいでしょうか?
問題は解決しましたが、すっきりしません。
上記の件だけで原因を特定するのは非常に難しいかと思いますが、
よろしければ何がしかのご指導をいただければ幸いです。
特にご連絡がないようでしたら、明日には〆切らさせていただきます。
ありがとうございました。
No.2
- 回答日時:
>もともと正常に作動するアクセスのファイルをコピーしまして
コピーによって、正常に動作していた環境と変ってませんか?
>環境変数 TEMP で指定されているフォルダがあるドライブに、空き容量がありません。
>そのドライブのファイルを削除するか、環境変数 TEMP で別のドライブを指定します。
>環境変数 TEMP で指定されているドライブまたはフォルダが無効または読み取り専用になっています。
>環境変数 TEMP で有効なドライブを指定するか、現在指定されているドライブまたはフォルダの読み取り専用の制限を解除します。
だそうですが、
この回答への補足
>>もともと正常に作動するアクセスのファイルをコピーしまして
>コピーによって、正常に動作していた環境と変ってませんか?
単純なコピーのため、環境は変わっていないと思われます。
その下の長文に関しては、ほとんど意味がわかりませんでした。
Cドライブには空容量はあるようです。
「環境変数TEMP」がわかりませんでした。
C:\WINDOWS\TEMP は読み取り専用にはなっていないようです。
できましたらもうすこし詳しく教えていただければ幸いです。
宜しくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
テンポラリファイルの空き容量
その他(Microsoft Office)
-
Accessでクエリを完了できません。と出ます。
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access「レコードが削除されま...
-
クロス集計クエリの結果をテー...
-
Accessクエリで分類ごとの累計...
-
ExcelのVlookupでアクセスを参...
-
Access 結合プロパティについて
-
ACCESSでテーブルの一部だけを...
-
アクセスで新しいレコードの追...
-
ACCESS テーブル作成の日付付与...
-
Accessでテーブルやクエリのリ...
-
ACCESSのクエリの中でのクエリ指定
-
Accessのテーブルのフィールド...
-
ACCESSのフィールドの表示順が...
-
Accessの桁区切りについ...
-
テキストボックスにクエリ結果...
-
クエリ上でフィールド名が2つ...
-
エクセルのデータをアクセスに...
-
EXCELの外部データ取得ができない
-
エクセルデータをワードで差し...
-
日付型のフィールドに空白を入...
-
ACCESSで改行コードを削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
アクセス:クエリの結合とリレ...
-
アクセスのクエリでSplit関数は...
-
デザインビューにてテーブルが...
-
アクセス 項目毎にデータを横...
-
access テーブル作成クエリでテ...
-
クエリのデータをテーブルに入...
-
access インポート時、既にある...
-
教えてください! アクセスのac...
-
accessでクエリの結果だけをリ...
-
Access「レコードが削除されま...
-
更新不可能なクエリに対して更...
-
アクセス クロス集計クエリ→テ...
-
ACCESS2000 クエリをテーブル化...
-
アクセスで新しいレコードの追...
-
Access2010「クエリが複雑すぎ...
-
Access 末尾に0を追加したい
-
ACCESSで行数指定(5万行目~8...
-
Accessのクロス集計→テーブル作...
-
アクセスのクエリとDlookupはど...
おすすめ情報