• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access 2021 でクエリが急に実行されなく)

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

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

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

  • ベストアンサー
  • cicibo
  • ベストアンサー率34% (190/558)
回答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/558)
回答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/558)
回答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/558)
回答No.3

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

nonnonmue
質問者

補足

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

  • chayamati
  • ベストアンサー率41% (260/624)
回答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/558)
回答No.1

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

nonnonmue
質問者

補足

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

関連するQ&A

専門家に質問してみよう