• ベストアンサー

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

  • ACCESSテーブルのデータの一部を削除

    よろしくおねがいします。 仕訳伝票のテーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]に仕訳日のフィールドがあります。 仕訳日が削除日以前のデータを削除するのに次のようにしました。 1 DoCmd.RunSQL ("delete FROM 仕訳明細 where 仕訳日<=[削除日] INNER JOIN 仕訳伝票 ON 仕訳伝票.仕訳ID = 仕訳明細.仕訳ID ;") 2 DoCmd.RunSQL ("delete from 仕訳伝票 where 仕訳日<=[削除日] ;") 2 はうまくいきそうなのですが 1 が「 '実行時エラー 3075' クエリー式…の構文エラー演算式がありません」となります。

  • アクセスのクエリでレコード削除ができません。

    アクセス超初心者です。 テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。 いらないレコードを削除しようとしたところ、できません。 くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。 どうしたらよいのか教えてください。 あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか? 表示しないなら、できるのですが・・・。削除がわかりません。 よろしくお願いいたします。

  • Access 2007で、テーブルからレコードを削除するクエリを作りた

    Access 2007で、テーブルからレコードを削除するクエリを作りたい。 具体的には、テーブルAのフィールドF1とテーブルBのフィールドF2があるとします。このとき、テーブルA中の各レコード(仮にXとします)であって、そのF1の値と同じ値をF2に持つレコードがテーブルBに含まれている場合は、(テーブルAから)そのレコードXを削除するという処理をしたいのです。ややこしいと思いますが、これをクエリやマクロで作ることはできるでしょうか? 私はVBAを知らない初心者です。上の処理も文章で書くと理解してもらえるかどうか不安ですが、だれか助けて下さい。

  • ACCESSのSQLです。

    お世話になります。  ACCESS210で  勘定科目、仕訳帳、予実集計の3個のテーブルで  仕訳帳を月ー科目ID毎に集計して予実集計に反映するのに DoCmd.RunSQL ("Delete From 予実集計;") DoCmd.RunSQL ("Insert Into 予実集計(月度,科目ID,当年実績)" _ & "Select [仕訳日]-Day([仕訳日])+1 as 月初,科目ID, " _ & " sum(IIf([貸借区分] = ""借方"",[借方]-[貸方],[貸方]-[借方] as 収支) _ & " FROM 勘定科目 INNER JOIN 仕訳帳 ON ID = 仕訳帳.科目ID" _ & " WHERE 繰越FG)=False group BY [仕訳日] - Day([仕訳日]) + 1 as 月初,科目ID; ")  とすると  実行時エラー "3075" 構文エラー演算子がありませんとなります。  因みに、下記の仕訳帳クエリ(下方に記述)を用いて DoCmd.RunSQL ("Delete From 予実集計;") DoCmd.RunSQL ("Insert Into 予実集計(月度,科目ID,当年実績) _ & " Select 月初,科目ID,sum(金額) From 仕訳帳クエリ _ & " WHERE 繰越FG = False group by 月初,科目ID; ") とするとエラーなく終了するのですが、出来ればクエリーを乱用したくないのです。 ・勘定科目  ID(主キー)  勘定科目名  勘定CD  科目群ID  貸借区分(借方、貸方)  繰越FG ・仕訳帳(主キーなし)  伝票No.  仕訳日  摘要  科目ID(勘定科目.IDにリレーション)  借方  貸方 ・予実集計  月度 (主キー 仕訳日の月初=仕訳日-DAY(仕訳日)+1)  科目ID(主キー)  当年予算  当年実績  前年予算  前年実績 ・仕訳帳クエリ勘定科目.IDー仕訳帳.科目ID  伝票No.  仕訳日  摘要  科目ID  借方  貸方  月初:仕訳日-DAY(仕訳日)+1  金額:iff(貸借区分="借方",借方-貸方,貸方-借方) 長文になりましたが、宜しくお願いします。

  • ACCESS 追加クエリでレコード数の指定したい

    Win XP Access2003 見積伝票を作成しております。サブフォーム(帳票フォーム)の登録方法でご教授お願い致します。 "伝票明細テーブルW"(伝票番号,行番号,内容、数量、単価、・・・)を基にした "伝票明細クエリW"を作成し、入力しやすいようにフォームを開いた時に行番号(連番)を振り、30行表示するようになっています。 入力確認後に登録ボタンをクリックして追加クエリを開き"伝票明細テーブルW"から"伝票明細テーブル"に30件レコード保存するようになっているのですが、 場合によって内容が2~3行で終わる時があります。 このような時に無駄に30行のレコードを保存せず"内容"(フィールド)が入力されているの最終レコードまでで伝票明細テーブルに追加したいのですが、よい方法がありましたら宜しくお願い致します。 "内容"(フィールド)は途中に空白の時があります。 行番号    内容        数量  1     オイル交換      3.0  2  3     タイヤ交換       4.0

  • 2つのテーブルで重複する値のレコードを削除したい

    削除クエリ?重複クエリ?について教えてください。 テーブル1 フィールド"番号"には 1 2 3 テーブル2 フィールド"番号"には 3 4 5 があるとします。 「テーブル2と重複しているテーブル1のレコードを削除する」 (この場合「3」が重複しているのでテーブル1の3が入力されているレコードを削除) としたいのですがどいゆうSQL文を書けばいいのかわかりません。 ご教授よろしくお願いします。

  • 実行時エラー3086 削除クエリができない

    アクセスでvbaでアクションクエリを実行しようとしたら、エラーになりました。 エラー内容は 「指定されたテーブルから削除できませんでした。(エラー 3086)」 です。 コードは mySQL = "DELETE Tフォルダ名.* FROM Tフォルダ名;" DoCmd.RunSQL mySQL です。 今まで問題なく使えていたのにいきなりダメになりました。 テーブル名もフィールド名も存在するし、データも入っています。

  • 【Access】レコードが削除できない

    どんな操作をしてそうなったかわからないんですが、 テーブルの最終行に全フィールドのデータが「#Deleted」になっているレコードが出来てしまいました。 このレコードを削除し、一旦テーブルを閉じて、また開くと同じものが復活しています。 どうすれば消せますでしょうか??

  • 削除クエリをすると、必要なレコードが消えてしまう

    店のサンプル商品を発注し、返却される一連の作業をAccessで作っています。 T顧客名‥‥フィールド:「ID」「顧客」 Tサンプル品‥‥フィールド:「CD」「商品」 T発注‥‥フィールド:「ID」「CD」「発注日」「数量」←規定値1 T返却‥‥フィールド:「ID」「CD」「返却日」「数量」←規定値1 テーブルは以上です。 クエリは、 Q発注伝票‥‥フィールド 「T顧客:ID」「T顧客:顧客」「Tサンプル品:商品」「T発注:日付」「T発注:数量」 Q返却伝票‥‥フィールドは「T発注」の部分が「T返却」に変わります。 発注されたサンプル商品が返却されたら、 クエリの発注と返却を照合し、「T顧客:ID」と「Tサンプル品:商品のサンプル商品が一致した場合、 Q発注伝票のレコードだけ削除したいと思っています。 数量は規定1で、2以上発注しないので、無視でOKなのです。 削除クエリを用いましたが、なぜか、発注伝票だけでなく、返却伝票のレコードごと無くなってしまいました。 式を変えればエラーになり、また変えれば明後日の場所が消えたり‥‥。 何度やってもうまくいきません。 どのような解決策をすればよいか、煮詰まっています。 なお、クエリの更新が自動で出来れば良いとも思っていますが、出来ますでしょうか?

  • ACCESSでの重複レコードの削除

    ACCESSで、重複レコードを引っ張ってくるのは、重複クエリでやれましたが、逆に、重複レコード(1つのフィールド、或いは複数のフィールドに着目しての)の削除は、やれないのでしょうか? イメージしているのは、エクセルのオートフィルタでの「重複データの削除」です。 よろしくお願い致します。

専門家に質問してみよう