• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:レコード更新について)

ACCESS2000でレコード更新の方法と貸出状況の変更について

このQ&Aのポイント
  • ACCESS2000でのレコード更新について質問です。現在、メインフォームにはマスター登録ボタンがあり、サブフォームにはマスターテーブルのデータが表示されています。サブフォーム上で返却日を入力し、入力されたデータの貸出状況を「返却済」と変更したいのですが、現在のコードでは貸出状況が変わらない状態です。どのように修正すれば良いでしょうか?ACCESS初心者なので、もし他の方法もあれば教えていただきたいです。
  • ACCESS2000でのレコード更新と貸出状況の変更に関する質問です。現在、マスターテーブルのデータをサブフォームに表示し、返却日を入力したデータの貸出状況を「返却済」と変更したいのですが、現在のコードでは貸出状況が変わりません。ACCESSの初心者であり、修正方法や別の方法があれば教えていただきたいです。
  • ACCESS2000でのレコード更新と貸出状況変更に関する質問です。現在、メインフォームにはマスターテーブルのデータが表示されており、サブフォームで返却日を入力したデータの貸出状況を「返却済」と変更したいのですが、現在のコードでは貸出状況が変わりません。ACCESSの初心者であるため、修正方法や別のアプローチがあれば教えていただきたいです。

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

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

もしかすると、返却日が入っているものすべての貸し出し状況を「返却済」に変えたいのであれば、 更新クエリを一つ作るのが一番楽です。 sqlを実行させる形でも同じことです。 Dim db As DAO.Database Set db = CurrentDb db.Execute "UPDATE マスターテーブル SET 貸出状況 = '返却済' WHERE 返却日 Is Not Null" set db = nothing 勉強のためにいうなら、 (一件ずつチェックしながら更新する場合、) Set rs = db.OpenRecordset("マスターテーブル", dbOpenDynaset) do while not rs.eof If not isnull(rs!返却日) then rs.Edit rs!貸出状況 = "返却済" rs.Update end if rs.movenext loop ・・・・ のような形と、そのほかには(対象レコードのみを抽出して更新する方法) Set db = CurrentDb strSQL = "SELECT * FROM マスターテーブル WHERE rs!返却日 is not null" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)                     do while not rs.eof rs.Edit rs!貸出状況 = "返却済" rs.Update rs.movenext loop ・・・・ などがあります。(debugしていません。)

taho1999
質問者

お礼

ShowMeHowさん、色々ありがとうございます。 今回は、更新クエリでやる事にしました。 1つずつチェックする do while~ は少し考え込む時間が長かったのが 難点で、最後の抽出&更新より更新クエリの方がイメージだったので。 今回初めてSQL関連をいじったのですが、とても勉強になりました。 少し自分ができる動作の範囲が広がったと思います。 とても感謝です。 更新クエリは、動作確認取れました。 思い通りのイメージでした。 誠にありがとうございました。

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

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

>Set rs = db.OpenRecordset("マスターテーブル", dbOpenDynaset) 特定のレコードを開いているのではなくて、マスターテーブルを開いて一番最初に出てきたレコードを更新している。 ので、 strSQL = "SELECT * FROM マスターテーブル WHERE 品番 = '" & TEXT1 &"'" としておいて、 Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) とするか、 UPDATE マスターテーブル SET 貸出状況 = '返却済' WHERE 品番 = '" & TEXT1 &"'" のようなSQLを(更新クエリでも)を実行させればレコードを変更させることができます。 (TEXT1は品番が入っているテキストボックスのことです。)

taho1999
質問者

お礼

ShowMeHowさん、ありがとうございます。 すみません。私SQLまだ使った事なくてあまりわかってないのですが なんとなくコード書いてみたところ、エラーが出てしまいました。 Private Sub マスター登録ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL Set db = CurrentDb strSQL = "SELECT * FROM マスターテーブル WHERE 貸出状況 = '貸出中'" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)  ← ここで実行時エラー424                                オブジェクトが必要です。 If rs!返却日 <> "" Then rs.Edit rs!貸出状況 = "返却済" rs.Update End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub 今SQL文について調べてはいるのですが、まだわかっておらず どこがどのように間違っているのか教えて頂ければと思います。 宜しく御願い致します。

taho1999
質問者

補足

ShowMeHowさん、すみません。 先ほどのエラーは、私の打ち間違いでした。 >Set rs = d.OpenRecordset(strSQL, dbOpenDynaset) db⇒d になっていました。 これでいけるかと思ったのですが、貸出状況が反映されなかったです。 Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL Set db = CurrentDb strSQL = "SELECT * FROM マスターテーブル WHERE 貸出状況 = '貸出中'" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)                     If rs!返却日 > # Then/1/1900# Then ← <>"" が悪いと思い変更 rs.Edit rs!貸出状況 = "返却済" rs.Update End If 上記コードでエラーは出ませんが、最初にヒットしたレコードのみ "返却済"に変わっておりました。 これを返却日を入れた全てに対応させるにはどこを改善、又は コード追加したら良いですか? 宜しくお願い致します。

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

関連するQ&A