ACCESS2000での最終データ検索又は抽出について

このQ&Aのポイント
  • ACCESS2000を使用してレンタル品管理を行っていますが、初心者のために行き詰ってしまいました。現在の問題は、フォーム上で指定したレンタル品番の最新の貸出日を表示させる方法と、返却日を入力して更新登録する方法です。
  • レンタル品管理のACCESS2000において、フォーム上のテキストボックスに入力したレンタル品番の最新の貸出日を表示させる方法がわかりません。ADODB.Recordsetを使用し、Max関数で抽出することを考えていますが、具体的なコードの書き方が分かりません。
  • また、(2)の問題では、表示された貸出日に返却日を入力し、更新登録する方法がわかりません。どのようにコードを書けばいいのか検討がついておらず、困っています。お知恵をお貸しください。
回答を見る
  • ベストアンサー

ACCESS2000での最終データ検索又は抽出について。

ACCESS2000での最終データ検索又は抽出について。 現在レンタル品管理をACCESS2000にて作成しているのですが、 ACCESSを勉強しながら(ネット検索等)作成しており ACCESSを始めて10日の初心者のため、行き詰ってしまったので ご質問させて頂きたいと思います。 状況 テーブル:レンタル品マスター       品番      貸出日      返却日     00000     2010/4/1    2010/4/16     11111     2010/4/2    2010/4/5     22222     2010/4/5     00000     2010/4/17    2010/4/20     33333     2010/4/18     00000     2010/4/22     11111     2010/4/23 フォーム:レンタル品管理      テキストボックス(textレンタル品番)      テキストボックス(text貸出日)      テキストボックス(text返却日)      コマンドボタン(command貸出)      コマンドボタン(command返却) 上記2点作成してあり、現在わからなく止まってしまっている所は (1) フォーム上のテキストボックス(textレンタル品番)に入力しエンターキー等を 押したら、入力したレンタル品番の最新の日付(貸出日)をフォーム上text貸出日に 表示させる。 ex textレンタル品番に 00000 と入力しエンターキー等を押すと   text貸出日に自動的に 2010/4/22 と表示される。 (2) (1)で表示させたデータに返却日をtext返却日に入力&command返却を押す事で 更新登録させる。 この2点がわからないのです。 まず(1)は  Private Sub textレンタル品番_AfterUpdate() ここからコードの書き方がわかりません。 多分 ADODB.Recordset 等使い、Max関数で抽出なのかなぁとは 考えているのですが、書き方がわからず、ネット検索で調べてみたものの 私ができ悪いため、理解できず・・・・なのです。 End Sub (2)は、どうしていいのか検討もついておりません。 皆様お手数お掛け致しますが、何卒ご教授の程宜しくお願い致します。 また、説明がわかりずらい・不足している等ございましたら 言って下さい。説明等の訂正・追加を致しますので。

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

  • ベストアンサー
  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

1.指定した品番の最新貸出日をレンタル品マスターより検索する。 ※レンタル品マスターのデータ型はテキスト型と仮定しています。 ※フォーム上の品番テキストボックス名を、TXT_HINBANと仮定しています。 ※フォーム上の貸出日テキストボックス名を、TXT_LENTDAYと仮定しています。 Option Compare Database Public mydb As DAO.Database dim strSql As String 'フォーム上の貸出日の初期値として当日をセットする。 '(レンタル品マスターに該当データが無い場合を考慮) Me.TXT_LENTDAY.SetFocus Me.TXT_LENTDAY.Text = date strSql = "" strSql = strSql & " SELECT * MAX(貸出日) AS LASTDAY FROM レンタル品マスター " strSql = strSql & " WHERE 品番 = '" & Me.TXT_HINBAN.Text & "'" Set Rs = mydb.OpenRecordset(strSql, dbOpenDynaset) '該当データ無し If Rs.RecordCount <= 0 Then GoTo myEnd '先頭レコードにポインターセット Rs.MoveFirst Do Until Rs.EOF 'フォーム上の貸出日セット。 Me.TXT_LENTDAY.SetFocus Me.TXT_LENTDAY.Text = Rs.Fields("LASTDAY") Rs.MoveNext Loop myEnd: Rs.Close 2.入力された貸出日貸出日、返却日をレンタル品マスターへ更新する。 ※貸出日、返却日の入力チェックがOKならばマスター登録/更新する。 2.1.当品番がレンタル品マスターに有るか無いかチェックする。 (ヒント) SQL文---> SELECT COUNT(*) FROM レンタル品マスター WHERE 品番 = 入力データ 2.2.有れば既存データの更新(UPDATE処理) (ヒント) SQL文---> UPDATE レンタル品マスター SET 貸出日=入力データ , 返却日=入力データ WHERE 品番 = 入力データ 2.3.無ければ新規追加(INSERT処理) (ヒント) SQL文---> INSERT INTO レンタル品マスター (貸出日 , 返却日) VALUES(入力データ , 入力データ) 後、不要となったマスタデータなどの削除機能もあればいかがでしょう。(DELETE処理)

taho1999
質問者

お礼

Hardkingさん、ありがとうございます。 丁寧な説明、ヒント、提案とても有難かったです。 まだ、ACCESS始めたばかりで勉強中の私にとって ヒントという記載方法はとても勉強になりました。 ヒントを見ながら自分で調べてやっていると理解もし易かったです。 また、1つのやる事に対して方法がいろいろある事も 興味深かったので、これからも時間をかけ 勉強を続けていこうと思います。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

#1です。 すみません。いま、C#のプログラム中で、うっかり";"(セミコロン)を 書いてしまいました。VBAは行末をもってステートメントの終端とする ので、ステートメントの終端は何も書きません。セミコロンは削除して ください。

taho1999
質問者

お礼

nda23さん、誠にありがとうございます。 私はまだ「”」「’」等使い方がいまいち良く理解できていないので 「;」もなにか意味があるものとして考えており いろいろ調べてみてました(笑) 「;」消して確認取ったところ、何も問題なく動きました。 ACCESSでちょっとしたプログラミングができれば 今後役に立つので、これからも勉強を続けていこうと思います。 また行き詰る事ありましたら、その時はお力添えをお願い致します。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

(1)はいろいろとあるのですが、Daoのレコードセットを使う 方法が良いと思います。 Dim R As Dao.Recordset Dim SQL As String SQL = "SELECT MAX(貸出日) FROM レンタル品マスター" SQL = SQL & " WHERE 品番='" & textレンタル品番 & "'" SQL = SQL & " GROUP BY 品番" Set R = CurrentDb.OpenRecordset(SQL, dbOpenSnapshot); If R.EOF Then     '該当データがない場合の処理 Else     text貸出日 = R.Fields(0) '日付を表示 End If R.Close (2)も同じようにSQLを使った更新が良いでしょう。 ボタンのクリック時イベントでプロシージャを定義します。 Private Sub command返却_Click() Dim SQL As String SQL = "UPDATE レンタル品マスター SET" SQL = SQL & " 返却日=#" & text返却日 & "#" SQL = SQL & " WHERE 品番='" & textレンタル品番 & "'" SQL = SQL & " AND 貸出日=#" & text貸出日 & "#" CurrentDb.Execute SQL End Sub 別法としてレコードセットを使う方法もあります。 Dim R As Dao.Recordset Dim SQL As String SQL = "SELECT * FROM レンタル品マスター" SQL = SQL & " WHERE 品番='" & textレンタル品番 & "'" SQL = SQL & " AND 貸出日=#" & text貸出日 & "#" Set R = CurrentDb.OpenRecordset(SQL, dbOpenDynaset); If R.EOF Then     '該当データがない場合の処理 Else     R.Edit     R.Fields("返却日") = text返却日     R.Update End If R.Close 但し、将来DBを他のDBシステムに変更し、リンクテーブルとして 処理するようになった場合、DLookUp等の関数を使う方法や、 レコードセット内の検索、あるいはレコードセットでの更新は とても効率が悪く、場合によっては使い物にならないほど遅い こともあります。

taho1999
質問者

補足

nda23さん、丁寧に教えて下さりありがとうございます。 まず、どういった動きになるか確認しようと思い 上記コードをコピペしたところ、下記のところでエラーが発生してしまいました。 ネット検索してみたのですが、何が原因かは私にはわかりませんでした。 すみませんが、教えて頂いてもよろしいでしょうか? (1) Set R = CurrentDb.OpenRecordset(SQL, dbOpenSnapshot); (2) Set R = CurrentDb.OpenRecordset(SQL, dbOpenDynaset); コンパイルエラー:構文エラー 上記構文がグレー&Private Sub・・・ が黄色でした。 コピペがいけなかったのかなと思い、手打ちしていたら 作成中に上記コードの最後「;」がエラーで作成もできませんでした。 お手数お掛け致しますが、何卒宜しくお願い致します。 また、自分でも引き続き調べてみます。

関連するQ&A

  • 連続番号のデータ入力について。

    連続番号のデータ入力について。 環境: ACCESS2000     今回在庫管理のデータベースを作成しており、 商品の品番が1度に大量仕入してるため連続いたものになり データ入力が手間がかかるので、簡易に入力できるフォーム作成しております。 状況:フォーム(名称:在庫管理)    フォーム上にテキストボックス(名称:text品番頭)          テキストボックス(名称:text品番start)          テキストボックス(名称:text品番last)          テキストボックス(名称:text商品名)          テキストボックス(名称:text仕入先)          コマンドボタン(名称:command登録)    テーブル(名称:在庫マスター)    フィールド  品番    商品名   仕入先 今回やりたい事:    text品番頭にアルファベット3文字、    text品番startに数字4桁(登録したい番号の開始数字)、    text品番lastに数字4桁(登録したい番号の最後)、    text商品名に商品名、text仕入先に仕入先    を入力し、command登録でテーブルに入れる。    その際、品番はtext品番頭+text品番start~text品番lastでフィールド品番に連続登録、    商品名及び仕入先はtext商品名(text仕入先)に入力されたものを全ての品番に対応した    商品名及び仕入先フィールドに登録。   ex: text品番頭  AAA       text品番start  1111      text品番last  5555      text商品名  いちご      text仕入先  八百屋     と入力した場合、テーブルに     品番      商品名    仕入先    AAA1111     いちご    八百屋    AAA1112     いちご    八百屋    AAA1113     いちご    八百屋    AAA1114     いちご    八百屋      ・      ・      ・      ・      ・      ・    AAA5555     いちご    八百屋    つたない説明でわかりにくいとは思いますが、 ネット等で調べていても連続した数字入力は クエリばかりでてくるため、どのようにコードを組み上げて いいのかわかっておりません。 自分のできる範囲は、フォーム利用によるデータ入力は作成できる程度です。 何卒ご教授の程宜しくお願い致します。

  • Access テーブルのデータをフォーム上で、検索したい

    こんにちは。Access で簡単な貸出管理データを作っています。 現在、貸出フォームは作ったのですが、 返却フォームを作る際、 今度は、一度テーブルに保存した貸出記録データを 返却フォームで検索して、表示したい場合、どのように したらよろしいでしょうか? 貸出フォームでは、 テーブル1、社員ID、氏名、電話番号 テーブル2、備品ID、備品名、貸出日、返却予定日、 社員ID、氏名、電話番号 これをサブフォームを使ってつくりました。 このテーブル2のデータを返却フォームで検索して、 (備品IDか社員IDで) 表示させたいと思っています。 よろしくお願い致します。

  • Accessでの検索

    宜しくお願いします。 Accessで検索フォームを作成しようと思っています。 フォームから入力した番号を検索して 結果をテキストボックスに表示するといった感じです。 質問の内容は複数のテーブルがある場合、 どのようにすればいいのか?です。 色々調べてみたのですが、わかりません・・・。 ご存知の方がおりましたら教えて下さい。 宜しくお願いします。

  • ACCESS フォームで入力データを残したいです。

    いつもお世話になっております。 今回はACCESSについてご指導お願い致します。 テーブルからフォームを作成したのですが、テキストボックスで1件目の入力データの内容を2件目入力するときに、そのまま残しておきたいのです。 テキストボックスには日付や品番など入力していくのですが、同じ場合は入力を省きたいと思っています。難しいでしょうか・・? 最近ACCESSの勉強をはじめたところなので、用語などもほとんどわかりません。 宜しくお願い致します。

  • Access2003 検索用フォームでの検索がうまくいかない

    Access2003 検索用フォームでの検索がうまくいかない とある、テーブルを参照するフォームを作成。 そしてテキストbokを設けて、各項目毎にキーワードを指定してデータを抽出できるようにしたいのですが、 どうもうまくいきません。 検索は出来ているのですが、全部ひっかからないのです。 例えば ID という項目を検索するbox に"1"を入力して ID=1の全データを抽出しようとすると、一部検索にかかってこないものがある という具合です。 テーブルに入力されている数字や文字が本当に一致しているかどうかも調べましたが確かに一致しています。 実際、テーブルを開いて ctr+f で検索すると全てひっかかります。 何が原因なのでしょうか??? 私の作った手順は以下のとおりです。 テーブル作成(エクセルからインポート) ※空白の欄もあります フォーム新規作成でフォーム作成 フォーム上にテキストbox作成 クエリ作成 (Like "*" & [Forms]![フォーム名]![テキストbox名] & "*" ) マクロ作成⇒フィルタ実行/上の手順で作ったクエリを登録 マクロをフォーム上へドロップ およそこのような手順です。

  • アクセスの抽出について

    Win2000、アクセス2000を使用しています。 フォーム上のテキストボックスに検索条件を入力して抽出をさせる場合に、AというフォームとBというフォームにそれぞれ検索条件を入力してAB両方の条件に合致するデータを抽出することは可能でしょうか? 可能でしたら、手順等教えてください。

  • ACCESS2000 あいまい検索の結果からデータをフォームに取得

    MSACCESS2000にてフォームを作り、テキストボックスに入力された文字で、データをあいまい検索し、複数表示するようになってます。like [テキストボックス]&"*" 複数表示されたデータから1つを選択し、フォームのテキストボックスに取得することは可能なのでしょうか? ACCESSを始めたばかりで、いろいろ調べたりしているのですが、可能かどうかが知りたいのです。どうか宜しくお願いします。

  • 日付によるデータ抽出について

    日付によるデータ抽出について 環境: ACCESS2000 状況: メインフォーム(テキスト期間A、テキスト期間B、テキスト品番、検索ボタン)    サブフォーム(データシート)    管理テーブル( 品番  /  レンタル日  /  返却日)    ※管理テーブルは他テーブルのコピー用 やりたい事: 簡潔にいうと期間と品番による抽出。       但し、テキスト期間Bが空白の場合、テキスト期間A以降のデータ抽出。          テキスト期間Aが空白の場合、テキスト期間B以前のデータ抽出。       さらに、テキスト品番が空白の場合、期間のみでの抽出。       逆にテキスト期間A・Bが空白の場合、テキスト品番で抽出。(品番の履歴抽出) 1度コードを作ってはみたものの、エラーばかりでひどかったので 0から教えて頂けると有難いです。 お手数お掛けしますが、何卒宜しくお願い致します。

  • ACCESSでの検索

    あいまい検索をしたいです。 【現状】 フォームデザインでテキストボックスを作り、検索ボタンを作成 ↓ 【したいこと】 マクロデザインで、「テキストボックスに文字列を入力すると、文字列を含むデータを抽出」 というまくろを組みたい。 [コード]=[Forms]![total]![コード入力]という、完全一致のものはここで教えていただいて作成できたのですが、もうひとつ、あいまい検索もしたいです。 あいまい検索は、「商品名」です。 宜しくお願いします。

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

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

専門家に質問してみよう