• ベストアンサー

Access 条件によってフィールドのデータを削除したい

いつもお世話になっています。 Accessで書籍管理のデータベースを作っています。 「利用者名」「連絡先」「貸出日」等のフィールドがあります。  書籍が返却されたときに「利用者名」のデータを削除しますが、削除されたとき「Null」の時、そのレコードの「連絡先」と「貸出日」のデータを消去したいと思います。 どのように設定すればよいか教えてください。 また、貸しだし登録の時に、「利用者名」が入力されたのに、「連絡先」や「貸出日」を入力されていな場合の警告の出し方も教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

テーブルの値要求を「はい」にしようとすると、「入力規則に違反している」と出ます ↑そりゃなりますよ。フィールドにデータが無いのですから。 一応MDBのバックアップを取ってください。 再度テーブルデザインで、 値要求 はい とします。前回漏れてしまいましたが、 空文字列の許可 いいえ にしてテーブルを保存してください。 警告メッセージには 「はい」で進めていってください。 その後フィールドにテキトーに埋めていってください 更新クエリでいいかな。 上記のようにやっても。 ↑上記とは、どの部分ですか? 「ということを踏まえつつ」の前後で全く別の回答をしている つもりなのですが・・ うまく動作しません ↑具体的かつ詳細に説明してください。 一般的には ユーザーテーブル ユーザーID 主キー(オートナンバー、社員No、住民基本台帳のNo、健康保険No・・) 氏名 氏名よみ 連絡先 ・・・ 書籍テーブル 書籍ID 主キー(オートナンバーでよいと思います) 書籍名 書籍名よみ(洋書の場合などは研究してみてね。無くても良いかな?) ・・・ 同じ本の場合でも個々に登録しておいた方が良いと思います。 貸し出し履歴テーブル 履歴ID 主キー(オートナンバーでよいと ユーザーID(ユーザーテーブルがオートナンバーなら長整数型) 書籍ID(こっちも。書籍テーブルのデータ型と合わせてね) 貸出日 規定値 Date() 返却日 備考 でクエリを作成 前述のテーブルを3個使います。 履歴ID 貸し出し履歴テーブル.ユーザーID 貸し出し履歴テーブル.書籍ID 貸出日 返却日 備考 氏名 氏名よみ 連絡先 書籍名 ・・・ などとします。 で クエリの結合線をLeft Join・・ 貸し出し履歴テーブル.ユーザーID → ユーザーテーブル.ユーザーID 貸し出し履歴テーブル.書籍ID → 書籍テーブル.書籍ID 「→」は結合プロパティで設定してください これでユーザーID・書籍IDを入力すれば氏名・書籍名が出てきます やっと上記クエリを基にしてフォームの作成ができる様になりました。 また、運用面では、ユーザーID・書籍IDを速やかに探したいと 思うと考えられますので、コンボボックスを使うなりして下さい。 書籍IDの方はAccessに登録する際に書籍の裏あたりに書籍IDを マジックで書いちゃう(安易過ぎて NG でしょうけど) この辺でどうでしょ なお、ここの掲示板の「回答の補足」では当方にはメールが届きません。 レスつけたものはなるべく見るようにはしていますが、2~3日が限度かな。 私の名前のところをクリックしてみてください。 「お礼」ですとこちらにメールが入りますので適宜使い分けてくださいまし。 (フォームの話は別にご質問ください) ここは参考となると思います。 ニキータさんの魔法使いの開発工房 http://www.mahoutsukaino.com/ ついでに・・ Accessについてくるサンプル(ノースウィンド)も参考になりますよ。 たしかオプション指定しないとインストールされなかったように思います。

その他の回答 (2)

noname#60992
noname#60992
回答No.2

No1の方もおっしゃっておられますが、access(リレーショナルデータベース)というのはテーブルを分散して作ることができるところが特徴です。 書籍というデータと、利用者というデータと、貸し出し履歴というのを別のテーブルで管理することができるということです。 そうすることによって、書籍の管理、利用者の管理、貸し出しの管理を簡単に行えるようになります。 (連絡先のデータは、利用者のテーブルで管理して、貸出日は貸し出し履歴で管理するほうが合理的です。) 前置きが長くなってしまいましたが、データの変更を行うための方法として、更新クエリがあります。 特定のデータが選択されるよう抽出条件(フォーム上の値に指定をして)選択クエリをつくり、クエリを「更新」に変更し「レコードの更新」にて値を変更します。 そしてフォーム上よりコマンドボタンなどでこのクエリを実行させることにより、値を変更します。 連結フォームよりデータを操作すると、間違って値を変えてしまう可能性があるため、アクセスの操作に慣れていないユーザーがいる場合はあまりお勧めしません。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

「利用者名」「連絡先」「貸出日」等のフィールドがあります。  書籍が返却されたときに「利用者名」のデータを削除しますが 私だったら返却日フィールドを追加して、このフィールドのデータ有無で 返却されたかを判断するようにします。 この方が、後になって 書籍に破損が見つかったときに「容疑者」が分かりますし どの書籍が人気なのか?など等、わかるようになります。 そうすれば「連絡先」や「貸出日」のテーブルデザインで 値要求を「はい」にしておけば質問の後半も解決できます。 ということを踏まえつつ ご質問の回答としては フォームの利用者名の更新後処理に If Me!利用者名 = "" Then Me!連絡先 = "" Me!貸出日 = Null End If かな? 貸しだし登録の時に、「利用者名」が入力されたのに、 「連絡先」や「貸出日」を入力されていな場合の警告の出し方 フォームのタブオーダーを、「利用者名」→ 「連絡先」→「貸出日」と しておいて 「連絡先」と「貸出日」の フォーカス喪失時に If Me!連絡先 = "" Or Isnull(Me!貸出日) = true Then Msgbox "未記入項目があります" Cancel = True End If などと記述しておけば良いと思います。

hasmiya
質問者

補足

丁寧な回答ありがとうございます。 テーブルの値要求を「はい」にしようとすると、「入力規則に違反している」と出ます。そして、上記のようにやってもうまく動作しません。 どうすればよいのでしょうか?よろしくお願いします。

関連するQ&A

専門家に質問してみよう