- ベストアンサー
どうすれば・・・
VBAで困っています・・。図書管理で、下のコードは、'図書テーブルをサブフォームの図書IDで検索し、レコードが見つかればメインフォームの利用者IDを代入という意味です。しかしこれだと書籍が貸出されていても貸し出してしまうことになるので、Ifを使ってこの本は書架なら貸出OKで貸出中ならmsgboxで"貸出中です"というふうにしたいのですが・・・。 ご教授いただけますでしょうか? 宜しくお願いしますσ(^^) Dim rstBook As New ADODB.Recordset rstBook.Open "図書", cnn, adOpenDynamic, adLockPessimistic, adCmdTableDirect rstBook.Index = "図書ID" rstBook.Seek Array(Me!図書ID), adSeekFirstEQ If rstBook.EOF = False Then rstBook!利用者ID = Parent!利用者ID stBook.Update End If rstBook.Close
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「貸出中」のデータを格納しておくテーブルは無いんですか? 普通は「図書」「利用者」「貸出」テーブルを作成しておいて 「貸出」テーブルに貸出中の「図書ID」と その図書を借りている利用者の「利用者ID」を格納するテーブルを 作成するのがベターだと思うのですが。 そうすれば貸出処理の瞬間に「貸出」テーブルを参照して貸出があれば エラーメッセージを表示できます。 できれば貸出日フィールドもあれば返却期日を遅れている人を チェックできますよね。 どんなフィールドやテーブル構成なのかや アプリケーションの名前くらいは記載しておかないと 回答しづらいとおもいますよ。 (Accessですよね?)
その他の回答 (2)
- O_cyan
- ベストアンサー率59% (745/1260)
こんな感じですか? If rstBook!貸出ID = "書架" then rstBook!利用者ID = Parent!利用者ID rstBook!貸出ID = "貸出中" stBook.Update else MsgBox "貸出中です" End If
補足
本を借りると、図書テーブルに利用者IDが入り、=IIf(IsNull([利用者ID]),"書架","貸出中")で書架か貸出中になりますが、 貸出フォームで図書IDを入れたときに、この図書は利用者IDが入っているかどうかで判断できますよね?? この貸出IDは図書IDの間違いですか? If rstBook!貸出ID = "書架" then rstBook!利用者ID = Parent!利用者ID rstBook!貸出ID = "貸出中" rstBook.Update else MsgBox "貸出中です" End If 宜しくお願いします!
- taka_tetsu
- ベストアンサー率65% (1020/1553)
貸し出し中のときは、rstBook!利用者IDに値が入っているということでいいんですか? そういうことであれば、 更新する前にrstBook!利用者IDの値をチェックし、値が入っていたらメッセージを出して更新をしなければいいのでは?
お礼
すみません、いろいろいじってるうちに答えがわかりました! ありがとうございました!
補足
すみません、Access2002です・・。 私なりに考えたのですが、 If 図書ID = 2 Then MsgBox"貸出中です" Docmd.Close End If とすると、図書IDが2なら"貸出中です"と出たあとに画面を閉じてくれる のですが、2の部分を貸出テーブル参照して比較するという形にするには、 どういうふうにコードを書いたらいいですか? マクロでいう[Forms]![貸出テーブル]![利用者ID]みたいな感じの表現です・・。 宜しくお願いします!