• ベストアンサー

更新クエリの日付抽出方法について

process9の回答

  • process9
  • ベストアンサー率29% (81/272)
回答No.5

process9です。リクエストがあったので回答しますね。 問題を整理します。 受注期間、請求予定月には必ずデータがセットされているもの(受注登録時にセットされる) という前提の上で、 更新対象データ  受注期間開始日<=実行日<=受注期間終了日で且つ請求予定月=実行日の月  且つ受注終了日の月>実行日の月の受注データ  意味:実行日が受注期間内の受注データのうち     請求予定月に実行日の月と同じ月が指定されていて且つ     受注期間終了日の月が実行日の月翌月以降に指定されている     受注データ     (注:更新クエリを実行した日=実行日) 更新内容  更新対象データの請求予定月に実行日の月に+1をセット。  意味:上記の更新対象の受注データの請求予定月に翌月を上書きする。   データ例 (実行前=請求処理前 実行日2006/03/31 のデータ状態)   受注番号   受注期間開始日 受注期間終了日 請求予定月   0001     2006/01/04   2006/02/27   2006/02   0002     2006/03/05   2006/05/05   2006/03   0003     2006/02/05   2006/03/20   2006/03   0004     2006/03/10   2006/04/20   2006/03   0005     2006/03/10   2006/05/20   2006/06   0006     2006/04/05   2006/05/05   2006/04 上記に従うと更新対象データは、以下の2レコード   0002、0004(翌月も請求の必要があるデータ)      以下は各理由のために更新対象とならない。   0001(既に終わってる受注)、0003(当月で請求が終了する受注)   0005(なんらかの理由で一括支払いのため、請求予定月が受注終了日の月に指定されている受注)   0006(まだ、始まっていない受注) 上記例のデータを更新内容に従って更新すると以下のようになる。   受注番号   受注期間開始日 受注期間終了日 請求予定月   0001     2006/01/04   2006/02/27   2006/02 (変化なし)   0002     2006/03/05   2006/05/05   2006/04 (請求予定月に翌月をセット)   0003     2006/02/05   2006/03/20   2006/03 (変化なし)   0004     2006/03/10   2006/04/20   2006/04 (請求予定月に翌月をセット)   0005     2006/03/10   2006/05/20   2006/06 (変化なし)   0006     2006/04/05   2006/05/05   2006/04 (変化なし) と考えていいですか?ここが合ってない場合は以下は無視してください。 そうであれば、このときのクエリ(SQL)は、 UPDATE [受注] SET [請求予定月]=DateAdd("m",1,[請求予定月]) WHERE [受注期間開始日] <= DATE AND DATE <= [受注期間終了日] AND FORMAT([請求予定月],"yyyymm") = FORMAT(DATE,"yyyymm") AND FORMAT([受注期間終了日],"yyyymm") > FORMAT(DATE,"yyyymm") になるかと思います。(検証してないので間違っている部分があるかも。) 試験として SELECT * FROM [受注] WHERE [受注期間開始日] < DATE AND [受注期間終了日] > DATE AND FORMAT([請求予定月],"yyyymm") = FORMAT(DATE,"yyyymm") AND FORMAT([受注期間終了日],"yyyymm") > FORMAT(DATE,"yyyymm") で思い通りの更新対象データが引っ張れているか試してくださいね。 ただし、これは、実行日が必ず請求月の末日に処理する前提です。 運用上、4月1日に3月の請求処理を行う場合には当てはまらないです。 そのときは別(請求処理日を実行日の前月の末日として)のSQLを発行する。 UPDATE [受注] SET [請求予定月]=DateAdd("m",1,[請求予定月]) WHERE [受注期間開始日] <= DateAdd("m",(CInt(FOMAT(DATE,"dd"))+1)*-1,DATE) AND DateAdd("m",(CInt(FOMAT(DATE,"dd"))+1)*-1,DATE) <= [受注期間終了日] AND FORMAT([請求予定月],"yyyymm") = FORMAT(DateAdd("m",-1,DATE),"yyyymm") AND FORMAT([受注期間終了日],"yyyymm") > FORMAT(DateAdd("m",-1,DATE),"yyyymm") どうでしょうか。

ichigobana
質問者

お礼

詳しい説明どうもありがとうございます!!! まさにやりたいことを書いてくださって いましたので、一行ずつ首をかしげながら やっと理解できました!! できました!!! ただ、ひとつわからないところが ありまして、更新クエリを実行する際、 日付を入力する画面が出てくるのですが、 これは、本日の日付を入力するものなのでしょうか? 何度もずうずうしくお聞きしてすみません。 これからまたじっくり見てみます。 よろしくお願いいたします。

関連するQ&A

  • メイン・サブフォームの内容を更新クエリで更新したい

    お世話になります。 現在、 tb受注日報(親)、tb受注伝票(子)で、受注伝票をサブフォームという形で組み込んだ【受注日報フォーム】と tb作業表(親)、tb作業表明細(子)で、作業表明細をサブフォームという形で組み込んだ【作業表フォーム】 があります。 【受注日報フォーム】上にあるコマンドボタンのマクロに、親同士、子同士での追加クエリを設定し、ボタンを押せば【受注日報フォーム】に入力した内容を【作業表フォーム】に反映させられるようにしています。 この要領でコマンドボタンを押せば以前に入力した【受注日報フォーム】の更新内容を【作業表フォーム】に反映させられるようにしたいと考えています。 そこで、親同士、子同士で更新クエリを作ってみた結果、親同士の更新は大丈夫でしたが、子同士の更新が一番目のレコードしか更新されませんでした。 更新クエリの抽出条件 親 フィールド 「識別番号」(オートナンバーです)   テーブル 「作業表」   抽出条件 [forms]![受注日報]![識別番号] 子 フィールド 「受注伝票番号」   テーブル 「作業表明細」   抽出条件 [forms]![受注日報]![受注伝票Sub].[form]![受注伝票番号] ちなみに親同士の追加クエリの抽出条件に使用した主キーは「識別番号」とは別の番号で、オートナンバーではなく、最大値に+1するやり方で振っている番号を使用していて、子同士の主キーは追加クエリも更新クエリもおなじ[受注伝票番号]を使用しています。 抽出条件かこの主キーの設定が問題なのかなあと思いますが、わからないのでどなたかご回答宜しくお願い致します。

  • Accessで期間抽出方法

    アクセスの検索フォームで 期間の抽出をしたいと思っています。 クエリではできるのですが、クエリではなく、コードビルダを使用しています。 「検索フォーム」で条件を入力し、「T_マスタテーブル」から作成した 「検索結果フォーム」に表示したいのです。 検索フォームの 「取得日1」に1999/3/6、「取得日2」に2002/4/25 と入力した場合、1999/3/6~2002/4/25の間が表示されるようにしたいのです。 どのように入力すればいいのでしょうか? 宜しくおねがいがします。 Ac2000

  • クエリーの抽出について

    今回初めて質問させていただきます。 所持しているゲームソフトが増えてきたので、ACCESSで管理したいと思いました。 テーブル、追加クエリー等は作成したのですが、フォーム上でメーカー名と頭文字という二つのテキストボックスを作成し、クエリーにて FORM!検索フォーム!テキストボックスという感じで作成し、抽出をしようとしたところ、両方のテキストボックスに検索条件を入力しないと抽出されないことに気づきました。 これを、一つの検索条件を入力した時にも抽出できるようにできませんか?説明がわかりにくいかもしれませんが、よろしくお願いします。

  • ACCESS2000 更新クエリで文字を追加・変更したい

    ACCESS2000のマクロでCSVファイルをインポートし、Excelに出力しています。 そこで途中に更新クエリを使い、文字の追加・変更を行いたいのですが何故かうまくいきません。。。 【テーブルA】 フィールド/受注番号(910004292) 【テーブルB】 フィールド/出荷番号(910005232)/製造番号(910005451) 【テーブルC】 フィールド/受注番号(910005232)/製造番号(910005451)/納期(1021) 受注、出荷、製造の各フィールドは先頭に"0"を追加したいです。 910004292→0910004292 納期は2009/10/21となるように、現在の西暦(できれば自動)/と3桁目にスラッシュを入れて、yyyy/mm/dd形式にしたいです。 更新クエリで フィールド:受注番号 テーブル:テーブルA レコードの更新:"0"&[受注番号] と入力してやるとうまくいきました。 同じように横のフィールドに フィールド:受注番号 受注番号 ・・・ テーブル:テーブルA テーブルB ・・・ レコードの更新:"0"&[受注番号] "0"&[受注番号] ・・・ と各テーブルの全てのフィールドを入力して更新すると、 レコードに物凄い数の"0"が追加されてしまいます。 例:0000000000000000910004292 何度も繰り返しているようなのですが、なぜなんでしょうか? 更新クエリを別々に作ればそれぞれうまくいきました。 ひとつのクエリに複数のテーブルのフィールドを入れると駄目です。 また、納期について1021→2009/10/21にうまく変更する方法はありますでしょうか? 分かりにくくて申し訳ありませんが宜しくお願いいたします。

  • フォーム入力、更新後処理で指定テーブルへのバックアップ方法

    受注DBを作成しています。 テーブル1:受注テーブル (受注日,受注訂正日,得意先名・・) テーブル2:受注テーブル履歴テーブル     (受注日,受注訂正日,得意先名・・) フォーム :受注入力フォーム があります。 受注を受けたら受注入力フォームへ入力します。 受注が変更になった場合、受注訂正日に入力後、 最初に入力したデータを受注テーブル履歴テーブル へ自動的にバックアップをとりたいと考えています。 更新後処理で、「値の代入」で処理するのでしょうか?イベントプロシージャーで入力するのでしょうか? バックアップは、初回受注入力フォームへ入力した データをすべてバックアップしておきたいと 考えております。 よろしくお願いいたします。

  • クエリで抽出したものに日付を入力して更新したい

    素人質問です。よろしくお願いします。 クエリで発注データを抽出し、それに対して入荷日などを入力し更新したいのですが、今の状況だとbefore updateなどで設定して更新しますか?とメッセージを出していますが、 たとえば5件抽出して5件入力が終わったところで「変更データがあります。更新してもよろしいですか?」とメッセージを出して更新するかしないか…と進めたいのですが、どうしていいかわかりません。 助けてください!よろしくお願いします。

  • 更新クエリがわからない

    windows-xp、Access2003を使っています。 参考書に載っている更新クエリは「同一のテーブル内でデータを更新する」という内容で載っているのを見ました。 が、そうではなく・・・ 更新クエリを作成すると「レコードの更新」という欄が出てくるのですが、そこに、別のテーブルや別のクエリのデータを”ビルド”で作成することはできないのでしょうか? 試みたのですが、”パラメータの入力”というものが出てきてしまいました。 ついでにおわかりになれば、これも教えてください。 ↓↓↓ テーブルAとテーブルB(或いはクエリB)に、同じIDをもつデータがあります。そこで、テーブルAの指定するフィールドへ、テーブルBの新しいデータを入れ込みたい(更新)させたい。 すみませんが、宜しくお願い致します。

  • Access2007 クエリが読み取り専用になってしまう

    Access初心者です。 3つのテーブルのデータ(全て)をクエリに抽出して、そのクエリからフォームを作成し、フォーム上からデータ入力をしていきたいと考えております。 しかし、上記方法で作成したフォームは入力ができなく、ヘルプで調べたらフォームが読み取り専用になっているようでした。 いろいろ検索したのですが、どうやら更新可能なクエリにする必要があるみたいなのですが、その方法が分かりません。 宜しくお願いします。

  • アクセスのクエリで更新できるようにしたいんですが、

    アクセス2000を使っています。クエリから、作ったフォームを更新したいのですが、できません。どなたか教えて下さい。 二つのテーブルがあります。 ・テーブル1=顧客番号、顧客名、初来店日、来店日2・・・ ・テーブル2=顧客番号、顧客名、アンケートの有無、カードの有無・・・ というようなもので、エクセルから外部データの取り込み→テーブルのリンクで作ってます。 この二つのテーブルから ・クエリ1=顧客番号(テーブル1)、顧客名(テーブル1)、初来日店(テーブ ル1)、アンケートの有無(テーブル2) を作り、これをもとにフォームを作ってフォーム上でアンケートの有無を更新できるようにしたいのですが・・・。 初心者で説明も上手くできなくてごめんなさい。 宜しくお願いいたします。

  • テーブル間の更新クエリにおいて

    Access2010で入力フォームを作成しています。 一時データとしてテーブルAを連結サブフォームとして編集します。保存ボタンをクリックするとメインのテーブルB(Aとフィールド構成は同じ)へA、Bのフィールド間で値が異なる場合、上書き保存をするという更新クエリを用意しています。 質問はテーブルAでフォーム上、オプショングループのラジオボタン(項目はテキスト型 値リストは0と1)に設定した項目が初期値のnullから入力したデータがメインのテーブルBに更新できないので困ってます。 連結フォームなので、テーブルAに値が入っており且つBと値が異なるのはデータビューで確認しています。ただ更新クエリでの選択(データビュー)に載ってこない。 この項目がテーブルBに反映されるのは予めインポートで0もしくは1が入力されていた状態から変更した場合と他の項目も合わせて値に変更があった場合のみでした。 クエリの抽出条件はテーブルA.項目<>テーブルB.項目としています。他の項目もor条件で同じ設定にしています。切り分けのため、このオプショングループの項目だけを変更した場合のクエリにしても反映はされませんでした。 考慮すべき点あればご教示ください。 よろしくお願いいたします。 どうかお助けくださいませm(__)m