• ベストアンサー

ACCESS2007でレコードの条件付き削除

よろしくおねがいします。 テーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]の仕訳日のフィールドが削除日以前のデータを削除するのに次のようにしました。 「仕訳明細クエリ」作成 ※添付画像を見てください DoCmd.RunSQL ("delete FROM 仕訳明細クエリ;")で 「 実行時エラー'3086' 指定したテーブルから削除できませんでした 」 因みに 「仕訳明細クエリ」を開いてDeleteキーで手動削除すると仕訳明細のレコードは削除できましたが仕訳伝票のレコードは残っています。

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

  • ベストアンサー
回答No.1

前回のつづきです delete from 仕訳明細 where 明細ID IN (select 仕訳明細.明細ID from 仕訳明細 LEFT OUTER JOIN 仕訳伝票 ON 仕訳明細.仕訳ID = 仕訳伝票.仕訳ID WHERE 仕訳伝票.仕訳日 <=[削除日]) リレーションしているのが 仕訳IDではく伝票IDなのですね^^; delete from 仕訳明細 where 明細ID IN (select 仕訳明細.明細ID from 仕訳明細 LEFT OUTER JOIN 仕訳伝票 ON 仕訳明細.伝票ID = 仕訳伝票.伝票ID WHERE 仕訳伝票.仕訳日 <=[削除日]) いかがでしょうか?

shinkami
質問者

お礼

解決しました ありがとうございます。 ご指摘のようにフィールド名が誤っていました。 余分なご面倒を掛けてしまいすみません。 しかし複雑な構文ですね 他へ流用する時はここまで戻ることになります。

その他の回答 (1)

  • minosennin
  • ベストアンサー率71% (1366/1910)
回答No.2

ACCESS初心者ですが、横から失礼します。 画像では、クエリの種類が「選択クエリ」のようです。 クエリツールの画面で、上部にあるクエリの種類を「選択」から「削除」に変更すればよいのではと思いますが・・。 見当ちがいでしたらパスしてください。

shinkami
質問者

補足

ご回答ありがとうございます。 削除クエリがあるのですね レコードの削除行:where 規定値のまま 抽出条件:[forms]![メニュー]![削除日] としましたが この後どのように処理しますか DoCmd.RunSQL ("delete FROM 仕訳明細クエリ;") では 「 実行時エラー'3128' 削除するレコードを含んだテーブルを指定してください 」 (クエリはダメなようです) asteroid-b様のお陰で無事解決しましたが、こちらの方も知っておきたいです。 ご無理なさらない範囲で答えていただければと思います。

関連するQ&A