Access 2021でクエリが実行されず、データベースに反映されない現象について

このQ&Aのポイント
  • Access 2021で正常に動いていたクエリが突然実行されず、データベースに反映されなくなりました。同じ内容のクエリでもなぜでしょうか。
  • データベースの最適化/修復の試みで「クエリを完了できません。クエリ結果のサイズがデータベースの最大サイズを超えているか、一時的に保存するディスクの空き容量が不足しています。」というメッセージが表示されました。
  • レコード数がわずか10件で、データベースの容量も800MB以下なのに、テンポラリディスクの使用可能領域を増やす方法がわかりません。
回答を見る
  • ベストアンサー

Access 2021 でクエリが急に実行されなく

昨日までは正常に動いていたクエリが 突然、何の反応も示さなくなり その結果もデータベースに反映されません。 クエリ内の内容はまったく同じなのに どうしてでしょう。 で、データベースの最適化/修復をしようとしたところ 「クエリを完了できません。クエリ結果のサイズが データベースの最大サイズ(2 GB)より大きいか、 クエリ結果を一時的に保存するディスクの空き容量が 不足しています。」というメッセージが出ました。 ひょっとすると原因はこれかなと思い、 ヘルプを参照したのですが、 【テンポラリ ファイル用の空き容量が不足しています。 (エラー 3183)】というタイトルページで "TEMP DOS 環境変数"とか"テンポラリ ディスクより 大きなテンポラリ ファイルを作成するクエリを 作成しようとしています。" というようなことが記述してあります。 処理しようとするレコード数自体はわずか10件ほどだし、 全体のレコード件数も1,000件以下なのにどうしてでしょうか。 ちなみにデータベース自体の容量は800MBほどです。 例えば「テンポラリ ディスクの使用可能領域」を増やすには どうすればよいのかもわかりません。 いつも皆様にはお世話になっております。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cicibo
  • ベストアンサー率34% (190/557)
回答No.6

No1、No3、No4、No5です。 ご質問の内容がよく理解できずにすみません。 ID  作品名         主演 923 ファンタジア.ミッキー (空白) 924 美女と野獣.ベル    (空白) 925 水戸黄門.黄門さま   (空白) ↓↓↓ ID  作品名     主演 923 ファンタジア   ミッキ 924 美女と野獣 ベル 925 水戸黄門 黄門さま このようになって欲しい、ということで間違いないですか?

nonnonmue
質問者

お礼

様々な知識を教えていただきありがとうございました。 今後ともどうぞよろしくお願いいたします。

nonnonmue
質問者

補足

cicibo 様 ほんとにほんとに何度もありがとうございます。 >ご質問の内容がよく理解できずにすみません。 とんでもございません。 私の説明不足でござます。 >ID  作品名         主演 >923 ファンタジア.ミッキー (空白) >924 美女と野獣.ベル    (空白) >925 水戸黄門.黄門さま   (空白) >↓↓↓ >ID  作品名     主演 >923 ファンタジア ミッキー >924 美女と野獣 ベル >925 水戸黄門 黄門さま >このようになって欲しい、ということで間違いないですか? そのとおりでございます。 それでですね。 まったく申し訳ないことでございますが ついさきほど、偶然のように解決しちゃいました。 というのも、かなり以前までは正常に動いていた コマンド・ボタン(あるテキストボックスの中を Null値に置き換えるという値の代入コマンド)まで 実行時に「無効モードでは・・・」というメッセージが出て止まってしまうような事象が起きまして、 この初見の「無効モード」というものを いろいろと調べてみましたら 「クエリをブロックする無効モードを停止する」 というのに行き当たりました。 これは「Access でクエリを実行しようとしても クエリが機能しない場合は、 Access が無効モードになっているため、 クエリがブロックされている可能性があります。」 ということらしいのですね。 解決方法はデータベース コンテンツを有効にするために 「データベースを信頼する」→ 「メッセージ バーを使って信頼するか、 信頼できる場所にデータベース ファイルを保存します。」→ 「メッセージ バーを使用してコンテンツを有効にする」 →「メッセージ バーで、[コンテンツの有効化] を クリックします。」ということらしい。 でも私の場合、メッセージ バーが表示されないので [ファイル]>[その他]>[オプション]>[トラストセンター]> >[トラストセンターの設定]で、 [メッセージバー]>[すべての Office アプリケーションに適用するメッセージバーの設定]を「表示する」にし、 同じく[マクロの設定]を「有効」にしたところ コマンド・ボタンはもちろん、今回、対象とした クエリーも動くようになりました。 うーむ。この部分をさわった覚えはなかったのに マクロが無効になっていて なんだか基本的なところでAccess自体の設定が おかしくなっていたようです。 どうやら私の知識不足で皆様には 多々、ご迷惑をおかけしました。 でも、いろんなことを教えていただいたおかげで 私の Access 作成に関するステップが 僅かながらも進んだような気がいたします。 特に、cicibo 様からの多岐にわたるご指摘には 感謝いたしております。 ということで、 cicibo 様 chayamati 様 並びに皆々様。 まことにありがとうございました。 今後ともどうぞよろしくお願いいたします。

その他の回答 (5)

  • cicibo
  • ベストアンサー率34% (190/557)
回答No.5

No1、No3、No4です。 SQLを拝見させていただきました。テーブルが「T_作品」しか現れないということは、 「T_作品」だけで閉じてしまう、つまり「T_作品」の中の値で、「T_作品」の列を更新するということですね。 仕様がよくわからないのですが、まずは、SELECT文で内容を確認してみましょう。 いまあるUPDATE文を、select文に変更してください。 つまり、 SELECT T_作品.ID ,Mid([作品名],InStrRev([作品名]," ")+1,InStrRev([作品名],".")-InStrRev([作品名]," ")-1) AS 主演 ,Left([作品名],Len([作品名])-4) AS 作品名 WHERE (((T_作品.ID) Between 922 And 974)); です。これが更新後の結果になります。(SELECT文なので、更新はされていません) この内容で大丈夫ですか? 次に、T_作品にあるカラムの値で、T_作品のカラムを更新するといった際に、使うのがAS句による別名です。 詳しくは、「SQLの自己結合」でネット検索してみてください。 1つのテーブルを自身と結合する処理のことを表します。 また、SELECT文で確認します。 SELECT 作品A.ID ,Mid(作品A.[作品名],InStrRev(作品A.[作品名]," ")+1,InStrRev(作品A.[作品名],".")-InStrRev(作品A.[作品名]," ")-1) AS 主演 ,Left(作品A.[作品名],Len(作品A.[作品名])-4) AS 作品名 FROM T_作品 AS T_作品A,T_作品 AS T_作品B INNER JOIN T_作品 AS T_作品B ON T_作品A.ID = T_作品B.ID WHERE T_作品A.ID Between 922 And 974; これをUPDATE文に変更すれば、更新クエリになります。 手作りでSQLをつくったので、構文エラーはあるかもしれませんが、許してください。

nonnonmue
質問者

補足

cicibo 様。 たびたび申し訳ございません。 >SQLを拝見させていただきました。テーブルが「T_作>品」しか現れないということは、 >「T_作品」だけで閉じてしまう、つまり「T_作品」の>中の値で、「T_作品」の列を更新するということですね。 さようでございます。 >いまあるUPDATE文を、select文に変更してください。 ご指示のとおり、 このままコピー&ペーストさせていただきましたが、 「SELECT T_作品.ID ,Mid([作品名],InStrRev([作品名]," ")+1,InStrRev([作品名],".")-InStrRev([作品名]," ")-1) AS 主演 ,Left([作品名],Len([作品名])-4) AS 作品名 WHERE (((T_作品.ID) Between 922 And 974)); 」 すると 【SELECT ステートメントが間違っている予約語や引数を含んでいるか、区切り記号が正しくありません。】 というメッセージが出ます。 うーむ・・・・。 なにかまちがっているのでしょうか。 ごめんなさい。 どうぞよろしくお願い致します。

  • cicibo
  • ベストアンサー率34% (190/557)
回答No.4

No01、No03です。 >クエリの処理対象となるテーブルはひとつだけ(T_作品) ということは、クエリのFROM句は「T_作品」ひとつだけで、JOIN句は無い、ということで間違いありませんか? 実行しようとされるクエリのSQLを提供していただけないと、ちょっと理由はわかりません。

nonnonmue
質問者

補足

cicibo 様 重ね重ねのご回答に感謝します。 >>クエリの処理対象となるテーブルはひとつだけ(T_作品) >ということは、クエリのFROM句は「T_作品」ひとつだけで、 >JOIN句は無い、ということで間違いありませんか? はい。テーブルはひとつだけでございます。 >実行しようとされるクエリのSQLを提供していただけないと、 >ちょっと理由はわかりません。 以下のとおりなのですが・・・。 UPDATE T_作品 SET T_作品.主演 = Mid([作品名],InStrRev([作品名]," ")+1,InStrRev([作品名],".")-InStrRev([作品名]," ")-1), T_作品.作品名 = Left([作品名],Len([作品名])-4) WHERE (((T_作品.ID) Between 922 And 974)); どうもありがとうございます。 どうぞよろしくお願いいたします。

  • cicibo
  • ベストアンサー率34% (190/557)
回答No.3

No01です。 >クエリでリレーションシップは設定していない と言う事は、対象のなるレコードの件数は、レコード数の掛け算になります。 つまり、クエリのなかで、3のテーブルをしようする場合、レコード数が、1000件、300件、50件だとしたら、1000×300×50=15,000,000件に内部的になります。 そこから抜き出す処理が行われるので、リレーションは設定して見てから、やってみてください

nonnonmue
質問者

補足

cicibo 様 幾度も申し訳ございません。 >>クエリでリレーションシップは設定していない >リレーションは設定して見てから、やってみてください クエリの処理対象となるテーブルはひとつだけ (T_作品)なので必要ないかと思いましたが、 いちどやってみようと「俳優(T_俳優)」という 別のテーブルを同じクエリ上に追加して、 T_俳優の俳優名フィールド [1] 対 T_作品の主演フィールドを [多] のリレーションシップに組んでから クエリの「実行 ! 」をクリックしました。 あー、やはり何の反応もしませんし、もちろん結果も 反映されないようです。残念。 でも、ご意見ありがとうございました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

>昨日までは正常に動いていたクエリが突然、  何の反応も示さなくなり、  その結果もデータベースに反映されません。 「クエリを完了できません。  クエリ結果のサイズがデータベースの最大サイズ(2 GB)より  大きいか、クエリ結果を一時的に保存するディスクの空き容量が  不足しています。」というメッセージが出ました。  "TEMP DOS 環境変数"とか"テンポラリ ディスクより大きな  テンポラリファイルを作成するクエリを作成しようとしていま。  "処理しようとするレコード数自体はわずか10件ほどだし、  全体のレコード件数も1,000件以下なのにどうしてでしょうか。  ちなみにデータベース自体の容量は800MBほどです。 ★クエリーのレコードソースは複数のテーブルですね。  これ等は1対∞の完全整合性のリレーションで結ばれていますか  もしリレーションがないときはレコード数の積のレコードに  展開されます

nonnonmue
質問者

補足

さっそくのご回答をありがとうございます。 ごめんなさい。質問の内容があまりにも 漠然としていたかもしれません。 クエリでリレーションシップは設定していないのです。 具体的には映画作品のデータベースで テーブル(T_作品)があり、クエリで同テーブル内の それぞれのレコードの個々の作品タイトル [作品名フィールド]の中に含まれている 主演者の名前を空白になっている [主演フィールド]に一括して入力しようとする 更新クエリで、 主演フィールドのレコードの更新"行"には Mid([作品名],InStrRev([作品名]," ")+1,InStrRev([作品名],".")-InStrRev([作品名]," ")-1) そして、同時に作品タイトルの中の不要な部分(文字列)を 除くために、 作品名フィールド"列"に Left([作品名],Len([作品名])-4) とし、更新するレコードを特定する目的で IDフィールド"列"に、 Between 925 And 974 としています。 すべてひとつのテーブルからです。 皆様、何かとお忙しいところを 申し訳ございませんが、 どうぞよろしくお願いいたします。

  • cicibo
  • ベストアンサー率34% (190/557)
回答No.1

C:¥Users¥(ユーザ名)¥AppData¥Local¥Temp ここのフォルダを整理してみてください。

nonnonmue
質問者

補足

cicibo 様 >C:¥Users¥(ユーザ名)¥AppData¥Local¥Temp >ここのフォルダを整理してみてください ご回答をありがとうございます。 ご指摘のTemp フォルダをすべて空にしてみましたが やはりダメでした。 クエリがまったく実行できません。 どうしてでしょうね。

関連するQ&A

  • Access2003の仕様として、クエリのレコードセットのサイズ が

    Access2003の仕様として、クエリのレコードセットのサイズ が 1 GBまでという制限があるようですが、 具体的にどのような条件なのでしょうか。 選択クエリの実行結果が(レコード長×レコード数 が)1 GB超えると エラー等が出るのかと思いましたが、 上記の想定サイズが1.7GB(2億レコード)近くなっても、(遅くはなりますが)通常通り実行できます。 ちなみに、プロファイル直下のTempフォルダには、1.7GBのTMPファイルが 作成されていたので、やはり、レコードセットのサイズは1GBを超えているように思えます。 制限されないのであれば良いのですが、 ご存知の方がいらっしゃいましたら、ご教授頂けませんでしょうか。 宜しくお願いします。

  • Accessでクエリを完了できません。と出ます。

    Access2007を使用しています。 OS:Windows7(64bit) CPU:Core i7 870@2.93GHz 3.07GHz 実装メモリ(RAM):8.00GB 少しデータ量はあるものの、あるクエリをテーブルにしようとすると下記のエラーが出ます。 「クエリを完了できません。クエリ結果のサイズがデータベースの最大サイズ(2GB)より大きいか、 クエリ結果を一時的に保存するディスクの空き容量が不足しています。」 と表示され、テーブルが作成できません。 少しデータを減らして実行されるとテーブルは作成でき、Accessの容量は96,372KBとなります。 この減らしたデータが残り2GB弱とは思えないので、処理中に一時保存する空き容量が不足 しているのかなと思いました。 どうすれば先へ進むことができるでしょうか? よろしくお願いします。

  • テンポラリファイルの空き容量

    このカテゴリで合っているか解りませんが、 アクセスでクエリを作成中、 「テンポラリファイル用の空き容量が不足しています」 っとメッセージが出るのです。 スキャンディスクもかけていますし、 デフラグのマメにやっています。 この「テンポラリファイルの空き容量」を増やすには どうしたらいいでしょうか??? ヨロシクお願いします。

  • TEMPフォルダ内のデータについて

    MySQL4.0.26+PHP5.2.0を使用してシステムを構築しています。 1つのテーブルが300万件を超えたあたりから、処理が著しく遅くなってきましてあるところで「Got error 28 from table handler」というエラーを吐き出すようになり特定のクエリが実行できなくなりました。 調べてみると、TEMPに設定しているドライブの容量が0になっているとのことでした。そのドライブは空き容量は30GB近くあります。 クエリ実行中にTEMPフォルダ内にファイルが作成され30GB以上のファイルが作成されているのですが、このファイルサイズはどうにかならないのでしょうか? データベース容量が1.5GB未満に対してTEMPのファイルが30GBを超えてくるのはおかしいと思います。 どなたか分かる方、ご教授お願いします。

  • ACCESSのクエリーで元のデータベースにレコードほ追加したい

    クエリーで作成したデータベースに、違ったクエリーを使い、そのデータベースにレコードを追加して行きたいのですが、どうすればよいのか手順をご教授お願いします。 ここだけが出来ないので困っています。 宜しくお願いします。

  • Accessクエリ

    お世話になります。 Access初学者です。 グループごとに日付が最大のレコードを、それぞれ1件抽出するクエリを作成したいと思っています。 IDを表示させなければできるのですが、IDを表示させると全レコードが抽出されます。どのようにすればいいのでしょうか? よろしくお願いします。

  • Access97のクエリーについて

    Access97のクエリーで次のようなデータ抽出をしたいのですが、設定方法が良く分かりません。 1.約20000レコードのCSVファイルを外部データ   のインポートでTDLを作成。 2.重複クエリーを走行すると、約10000レコードが   重複していた。 3.作成したTBLから重複者がいないデータを抽出した   い。 イメージ: 処理前  a,2222,111,1,1234567  a,1111,100,1,0001234  b,0001,234,1,5555511  c,0003,001,1,0005555  c,0005,201,1,3345678  ↓(クエリー) 処理後  a,1111,100,1,0001234  b,0001,234,1,5555511  c,0003,001,1,0005555 どのような、関数、クエリーを使えば実現できるのでしょ うか。ご教示の程よろしくお願いします。

  • MicrosoftAccess2000の選択クエリについて教えて下さい

    MicrosoftAccess2000の選択クエリについて教えて下さい 当方は全くの素人ですが、なんとかAccess2000を用いてデータベースを作成しています。 ところが、時々クエリの内容を全く変更していないのにクエリ結果が違ってくる、といった現象が起きてしまいます。原因が分からず対処できずにいます。 どうかお知恵をお貸し下さい。 事例) Aテーブル(レコード数50)を基にした、Bクエリ(選択クエリ)があるとすると、 Bクエリの結果が、正しくは50レコードである筈なのに、100レコード(2倍)、あるいは400レコード(4倍)抽出されてしまう現象が起こります。(重複して抽出されます。) この現象は1ヶ月のうち1~2回しか起きません。 データベース構造をコピーし、Aテーブルをインポートした後にBクエリを開くと、もうこの現象は起きません。

  • Access のクエリの一時保存

    Access でテーブルから様々な処理をしてクエリを作成しているのですけれども、 クエリが終了するまで時間がかかってしまいます。 普段、そのクエリに対して、データの取得等をすることが多いので、 毎回、クエリが実行されるのは非効率です。 もともとテーブル自体、それほど更新するわけではないので、 クエリを行った結果をどこかに保存しておいて、テーブルが変更されたときのみ、 クエリが実行されるというようなことは、Access ではできないのでしょうか? また、ほかの DB では、そのような機能があるものなのでしょうか? あまりデータベースに対して詳しくないので、教えていただければと存じます。

  • MSアクセスのクエリで結果がおかしい

    アクセス2000で追加クエリを作成していますが、 クエリのデータシートビューで確認したレコードと 追加されたテーブルで確認したレコードが異なり、テーブルのデータが少なくなってしまっています。 条件としては、 クエリの参照元 SQLサーバからのリンクテーブル(レコード数で13万件程度) 追加先のテーブルはローカルのmdb内です たまたまかもしれませんが、今テストしているデータは、 クエリ上では、19件あるものの、実行しても9件しか追加されません。 原因としてありそうなものがわかる方がいれば、よろしくお願いします。

専門家に質問してみよう