• ベストアンサー

アクセスにて月末日付を取得し、テーブルの中身を更新するには?

お世話になっております。 Access2002で開発された以下のSQLが記述されているアクセスを要件がかわり、各月の月末日を設定したいのですが、どうしたらいいのかわかりませんので 教えてください。 現在の仕様  ある物件コードに複数の号棟がある場合、最新の日付 を持つ号棟コードの日付を"0000”に設定する。  例) 物件コード 号棟コード 日付     xxxxx   0001  2004/11/1     xxxxx   0002  2004/12/1     xxxxx   0000  2004/12/1     現在の仕様では、"0000”には 2004/12/1が    設定される したい事  例) 物件コード 号棟コード 日付     xxxxx   0001  2004/11/1     xxxxx   0002  2004/12/1     xxxxx   0000  2004/11/30     →最初に日付が設定されている11/1の月末日     を設定する 現在日付の最大値は”クエリ”にて抽出しているので 一番最初の日付”11/1”を設定することは”クエリ”の 条件を変更する事で設定することはできたのですが、 その先の月末日を設定する方法がわからないので 困っていますので宜しくお願い致します。 以下日付設定に関して現在記述されているSQL文 '全号棟竣工済みの[0000]号棟に最大の竣工日を設定 ssql = "delete * from T0000SET " gdb.Execute ssql Set oQy = gdb.QueryDefs("Q0000SET") oQy.Execute oQy.Close ssql = "UPDATE 号棟マスタ SET 号棟マスタ.竣工日 = Null WHERE (((号棟マスタ.号棟コード)=""0000""))" gdb.Execute ssql ssql = "UPDATE 号棟マスタ INNER JOIN T0000SET ON 号棟マスタ.物件コード = T0000SET.s1 SET 号棟マスタ.竣工日 = [s2]" ssql = ssql & " WHERE (((号棟マスタ.号棟コード)=""0000""))" gdb.Execute ssql

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

last_day()関数が使えれば月末日を返してくれます。 last_day()が使えなければDateAddで演算 DateAdd("d",-1,DateAdd("m", 1,[日付]))

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

月末日は、翌月1日の1日前です。 これでDateAddで求められますよね?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセスにて、フォームのテキストボックスの値をテーブルにコピーしたい

    初めて質問させていただきます。宜しくお願いします。 アクセスで、 ===フォーム上にある非連結テキストボックスに、日付を入力し、コマンドボタンをクリックすると、テーブルにある日付のデータをクリアし、その後フォーム上のテキストボックスに入力した日付を挿入===の方法を教えていただきたいと思います。 CurrentDb.Execute "DELETE * FROM T_設定日;" CurrentDb.Execute "INSERT INTO T_設定日(設定日) VALUES ('Me![年月日]');" 上記でやってみたところ、データのクリアはされるのですが、その後、テキストボックスに入れた日付は入りません。エラーは出ません。 アクセス初心者で、分かりにくい説明と思いますが、宜しくお願いします。

  • Accessの日付で不思議なことが

    Access2003で見積書を作るシステムを作りました。日々、見積書発行し月末に各物件の見積一覧表を作ります。個々の見積データにある、見積日付を範囲指定して、データを抽出します。 その方法としてフォーム上に二つのテキストボックスを配置し、それぞれに「自見積日付」、「至見積日付」という名前をつけ、一覧表印刷クエリーの中の見積日付の抽出条件にBetweenで「自見積日付」~「至見積日付」ををいれ抽出します。これをレポートで見積一覧表を印刷します。この方法で日付が2006年12月31日までは問題なく出来ましたが、日付が2007年1月1日以降になると抽出できなくなってしまいました。 もちろん2007年1月1日以降のデータは存在します。 原因がまったく分りません。どなたか分る方はいませんか。よろしくお願いします。(質問の書き方が苦手で分りにくくて申し訳ありません)

  • アクセスでのテーブル構成と入力フォームについて

    アクセスで悪戦苦闘しています。 どなたかお力を貸してくださいませ 下記の内容を入力するフォームを作成しています (後に決められた形式で出力します) 工事番号 部門 工事名 契約日 発注者 住所 電話 FAX メール 担当者 弊社担当者 請求書番号 請求日 請求金額 請求書番号2 請求日2 請求金額2 請求書番号3 請求日3 請求金額3 請求書番号4 請求日4 請求金額4 請求書番号5 請求日5 請求金額5 請求合計(1~5の合計額) 回収日 回収額 回収額合計 回収日2 回収額2 回収額合計2 回収日3 回収額3 回収額合計3 回収日4 回収額4 回収額合計4 回収日5 回収額5 回収額合計5 注文書 有・無 完了(済・未) ...他省略 上記の内容で下記のようにテーブルを作成しました ◎工事マスタ 工事番号(主キー)/部門コード/工事名/契約日/注文書 有・無/**発注者/**住所/**電話/**FAX/**メール/**担当者/社員コード…以下略 ◎部門マスタ 部門コード(主キー)/部門名 ◎社員マスタ 社員コード(主キー)/弊社担当者 ◎請求マスタ 請求ID(主キー)/請負額/税/合計/請求書番号/請求日/請求金額 請求書番号2/請求日2/請求金額2/請求書番号3/請求日3/請求金額3/請求書番号4/請求日4/請求金額4/請求書番号5/請求日5/請求金額5/請求合計(1~5の合計額)/回収日/回収額/回収額合計/回収日2/回収額2/回収額合計2/回収日3/回収額3/回収額合計3/回収日4/回収額4/回収額合計4/回収日5/回収額5/回収額合計5 完了(済・未) リレーションシップ 工事コード...工事マスタ(1)請求マスタ(∞) 社員コード...社員マスタ(1)工事マスタ(∞) 部門コード...部門マスタ(1)工事マスタ(∞) に設定しました ウィザードを使って請求マスタの全項目を入れた単票フォーム(サブA)を作成 ウィザードを使って工事マスタの全項目が入った(クエリA)を作成し それをもとに、ウィザードを使って(フォームA)を作成し、サブフォームに(サブA(単票))を設定しました。 一応どうにか形にはなりましたが 本当は工事マスタ内の**がついているフィールドは 顧客マスタとして分けていたのですが フォームでうまく入力ができなかったので とりえず、工事マスタにくっつけています。 何度も同じ電話や住所を打つのは面倒ですし、 テーブルを一つにしたこと自体抵抗があります。 しかし、同じ発注者でも、工事によって担当者が変わるので こういう場合はどう対応するべきなのかわかりません。 また、顧客マスタを別につくり、 コンボボックスにして 反映させるという方法も試してみましたが 新規に入力する場合は、上記のフォームにそのまま 入力したいと思っています。 上記の内容で どのような設定をすればよいのでしょうか? ウィザードでで顧客マスタと工事マスタを選択したクエリを作成して試してみたのですが それだと、フォームを開いたときに、工事マスタの既存のレコードが表示されなかったり、入力エラーが出たりとどうもうまくいきません。 もうひとつの問題は請求日と回収日なのですが それは別途質問させていただきたいと思います。 説明下手ですが どなたかお力を貸してくださいますようお願いいたします

  • PHPで明日の日付と明日の曜日を取得したい

    <td align="center"><?php date_default_timezone_set('Asia/Tokyo'); $week2 = array( 'Mon'=>'月', 'Tue'=>'火', 'Wed'=>'水', 'Thu'=>'木', 'Fri'=>'金', 'Sat'=>'土', 'Sun'=>'日' ); $w = $week2[date('D')]; echo date("j日") . "($w)"; ?></td> 上記のコードで今日の日付と曜日が取得出来るのですが、明日の日付と明日の曜日を取得するのはどうすれば良いのでしょうか。

  • ACCESS2007最大値を得て別項目更新

    ACCESS2007を使っています。 ・顧客マスタ ・売上伝票(ある日、特定顧客に何らかの商品が売れた) ・売上明細(上記売上伝票の詳細。商品名、個数など) (他に商品マスタなど) で構成したものがあります。 ここで、「機械のメンテナンス実施」という商品があります。それが売り上がると、「売上明細」のメンテ日というフィールドにその日付が入るように設定しました。(更新クエリで) ◆ここからが今の私の課題です。 その日付は機械のメンテナンス実施ごとに入っているわけですが、その最大値(最終日)を、拾ってきて、顧客マスタのフィールドの「最終メンテ日」というフィールドに入れたいと思います。 これは、どうすればよいでしょうか。 (なお、それ以降は、その最終メンテ日から1年経った顧客に連絡するなどの部分を作る予定です) ・選択クエリ「集計」で、顧客IDで「グループ化」し、メンテ日で「最大値」を選択すれば、メンテ最終日は出ますが、その値を上記フィールドに入れる(更新していく)には、どうすればよいのでしょうか。あるいは全く違った方法があるのでしょうか? よろしくお願いいたします。

  • アクセス VBA サブフォルダからインポート

    アクセス・エクセル2010を使用しています。 以下の作業を実行したいと考えていますが、初心者につき、ご教示ください! 1.ダイアログを表示させ、フォルダを指定したい:トップパス設定 2.1で指定したトップパス内(サブフォルダを含む)にある  一定のネーミングファイルを範囲を指定してインポート(マージ)したい 動作条件) a.トップパス:D:\test ←ダイアログで指定したい(可能であれば・・次回の動作時に覚えさせておきたい) b.インポートファイルの名称:*_3年目.xls(語尾に「_3年目」と付くエクセル) ←フォームのテキストボックスで設定したい c.インポート範囲:B7:Z56 ←変動するので、フォームのテキストボックスで設定したい 現在、同じパス内にあるエクセルファイルを指定した範囲でテーブルにインポートする というところまでは、ご親切な方にご教示いただき、以下にてうまく動いています。 初心者のため、どこをどう変更・設定すると 上記のような動きにできるのかがわかっておりませんため、 ご教示いただけないでしょうか。 ※[frm]![txt_範囲]:範囲指定をするフォームのテキストボックス  仮テーブル:取り込み時に作成するマージ用テーブル Dim f As Object Dim b As Object Dim c As Object Dim d As Object Dim t As Variant Dim e As Object Dim p As String Dim i As Long Dim sSql As String Dim x As String Set e = CreateObject("Excel.Application") t = e.GetOpenFilename("Excel Files (*.xls*), *.xls*") If t = False Then Exit Sub x = Forms![frm]![txt_範囲] Set f = CreateObject("Scripting.FileSystemObject") p = f.GetParentFolderName(t) Set d = f.GetFolder(p) Set b = d.Files On Error Resume Next sSql = "DROP TABLE 仮テーブル " CurrentProject.Connection.Execute CommandText:=sSql sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 For Each c In b If LCase(f.GetExtensionName(c)) Like "xls*" Then If i = 0 Then DoCmd.TransferSpreadsheet acImport, , "仮テーブル", c, True, x sSql = "ALTER TABLE 仮テーブル ADD COLUMN ファイル名 VarChar(50);" CurrentProject.Connection.Execute CommandText:=sSql sSql = "UPDATE 仮テーブル SET ファイル名='" & f.GetFileName(c) & "';" CurrentProject.Connection.Execute CommandText:=sSql i = i + 1 Else On Error Resume Next sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 DoCmd.TransferSpreadsheet acImport, , "一時テーブル", c, True, x sSql = "ALTER TABLE 一時テーブル ADD COLUMN ファイル名 VarChar(50);" CurrentProject.Connection.Execute CommandText:=sSql sSql = "UPDATE 一時テーブル SET ファイル名='" & f.GetFileName(c) & "';" CurrentProject.Connection.Execute CommandText:=sSql sSql = "INSERT INTO 仮テーブル SELECT * FROM 一時テーブル" CurrentProject.Connection.Execute CommandText:=sSql i = i + 1 End If End If Next On Error Resume Next sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 e.Quit Set e = Nothing MsgBox "データがインポートされました。" End Sub 尚、せっかく教えていただいたコードではありますが、 上記コードを用いては思った動作にならないのであれば、 新しい手法で教えていただくんでも構いません。 是非、よろしくお願いします!!

  • javaでGUIのDB(MYSQL)登録時文字化け

    JDK 1.6.0 MySQL 5.1 NetBeansのIDEツールを使用してSWINGのGUIアプリを勉強がてら作成しています。 JDBC接続でMYSQLにINSERTまではなんとかできましたが日本語を登録しようとすると文字化けが発生してしまいます。 登録結果:100006 ???????? ???? 0359210188 ???????????????????? この文字化けはJAVA、MYSQLのどちらで直すべきものでしょうか。 ちなみにMYSQLのMY.INIの下記の設定を変更してみましたがダメでした。 default-character-set=latin1⇒default-character-set=utf8 下記が登録時のソースです。よろしくお願いいたします。 private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try{ String sSql = ""; // 1.JDBC Driver の登録 Class.forName("com.mysql.jdbc.Driver").newInstance(); // 2.データベースへの接続 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/MyNewDatabase", "root", "umemoto"); // 3.SQL ステートメント・オブジェクトの作成 Statement stmt = con.createStatement(); // sSql += "INSERT INTO M_KAIIN ("; sSql += "NK_KAIIN"; sSql += ",NM_KAIIN"; sSql += ",NK_TEL"; sSql += ",NM_ADD"; sSql += ") VALUES ("; sSql += "'" + jTextField1.getText() + "'" ; sSql += ",'" + jTextField2.getText() + "'" ; sSql += ",'" + jTextField3.getText() + "'" ; sSql += ",'" + jTextField4.getText() + "'" ; sSql += ");" ; //実行 stmt.execute(sSql); // 6.データベースのクローズ stmt.close(); con.close(); } catch (SQLException e1) { System.out.println( "SQLException: " + e1.getMessage()); System.out.println( " SQLState: " + e1.getSQLState()); System.out.println( " VendorError: " + e1.getErrorCode()); } catch (Exception e2) { System.out.println( "Exception: " + e2.getMessage()); } }

  • 日付から月末を取得したい

    初めての投稿です。 access2000を使用しております。 クエリーを使用して日付フィールドからその月の月末を表示させたいと思っております。月末が土曜日や日曜日の場合は、その前日あるいは前々日の金曜日を月末にしたい。 ご教授のほどよろしくお願いいたします。

  • エクセルでデータを変更・入力した時だけ日付が更新される方法

    QNO.2915892を参考にさせていただき、マクロを設定しました。 正常に作動したのですが、その後シートの一部が変更できないように、ロックをかけることになりました。 するとロックのかかっている状態だと、このコードでは日付が更新されませんでした。 そこで、ロックのかかっていないセルのデータを更新した時だけ、 任意のセルに今日の日付(更新日)が自動で入るようにしたいです。 つまりエクセルを開いただけで、データを修正しなかったら日付は変わらないようにしたいです。 この場合はこのコードに何を足したり、どこを変更したらよいのでしょうか? もしくは全く別のものになるのでしょうか? 別のものであれば、それを教えていただけると助かります。 コードの意味はほとんどわかっていません。。。 *****以下今使っているコードです******** Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Range("B1") = Format(Date, "yyyy/m/d") Application.EnableEvents = True End Sub *********************以上**** どなたかよろしくお願いします。

  • エクセルで指定期間内に在職する対象者を抽出したいのです。

    お世話になっております。会社の在籍者名簿を作成したいのですが、次のような課題があります。 sheet1に以下のマスターデータがあります。   A    B     C    D     1 個人コード 所属コード 開始日付  終了日付 2  01   6000   2008/04/01 9999/12/31 3  02   1200   2008/03/01 9999/12/31 4  03    7000   2008/05/01 2008/05/20 5  04   1100   2008/03/01 9999/12/31 sheet2に期間以下の5月の在籍指定条件を設定します。 開始日付 2008/05/01 終了日付 2008/05/31 この期間内に該当する対象者が下記の通り抽出されます。   A    B     C    D     1 個人コード 所属コード 開始日付  終了日付 2  01   6000   2008/04/01 9999/12/31 3  02   1200   2008/03/01 9999/12/31 4  04   1100   2008/03/01 9999/12/31 日付についてのルールは以下の通りです。 A.個人コード03は、終了日付が2008/05/31前の為該当しません。月末まで在籍する方が対象となります。 B.在籍指定条件の開始日付より前に開始日付がスタートしている方は対象となります。 私の質問表現に曖昧な点がありましたらお許し下さい。ご回答をいただければ嬉しく存じます。宜しくお願い致します。