アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくおねがいします。
仕訳伝票のテーブル [仕訳伝票]、[仕訳明細]に
仕訳IDで 前者が1、後者がN のリレーション設定しています。
[仕訳伝票]に仕訳日のフィールドがあります。
仕訳日が削除日以前のデータを削除するのに次のようにしました。

1 DoCmd.RunSQL ("delete FROM 仕訳明細 where 仕訳日<=[削除日] INNER JOIN 仕訳伝票 ON 仕訳伝票.仕訳ID = 仕訳明細.仕訳ID ;")
2 DoCmd.RunSQL ("delete from 仕訳伝票 where 仕訳日<=[削除日] ;")

2 はうまくいきそうなのですが
1 が「 '実行時エラー 3075' クエリー式…の構文エラー演算式がありません」となります。

A 回答 (2件)

delete FROM 仕訳明細 LEFT JOIN 仕訳伝票 ON 仕訳伝票.仕訳ID = 仕訳明細.仕訳ID where 仕訳伝票.仕訳日<=[削除日]



でいかがでしょう?

この回答への補足

ご回答ありがとうございます。

「 '実行時エラー 3128' 削除するレコードを含んだテーブルを指定してください」となりました。

ACCESS2007を使用しています。

今一度よろしくお願いします。

補足日時:2009/12/15 17:56
    • good
    • 0

間違っていたようで失礼いたしました。



以下 念のためバックアップ等をしてから試してください。

仕訳明細の主キーをIDとします。
delete from 仕訳明細 where ID IN (select 仕訳明細.ID from 仕訳明細 LEFT OUTER JOIN 仕訳伝票 ON 仕訳明細.仕訳ID = 仕訳伝票.仕訳ID WHERE 仕訳伝票.仕訳日 <=[削除日])

これでいかがでしょうか?

この回答への補足

たびたび恐縮です

仕訳明細の主キーは明細IDです。
DoCmd.RunSQL ("delete from 仕訳明細 where 明細ID IN (select 仕訳明細.明細ID from 仕訳明細 LEFT OUTER JOIN 仕訳伝票 ON 仕訳明細.仕訳ID = 仕訳伝票.仕訳ID WHERE 仕訳伝票.仕訳日 <=[削除日]) ;")

としましたが、次のようなパラメータの入力ウィンドが空打ちで次々に表示されます。
・仕訳明細.仕訳ID
・仕訳伝票.仕訳ID

※ 同じ目的で「質問番号:5525157」を立ち上げました。

補足日時:2009/12/15 21:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!