Access学習メモ 3-10. コンボボックス乗り越えたい④

Access学習メモ 3-10. コンボボックス乗り越えたい④

コンテンツ
学び
誰も教えてくれなかった...
1年かけて勉強してきたの
かけた費用は10万円ほど(+2年ローンで購入したNECのLAVIEフェアリーパープルちゃん30万円弱 笑)
「フォームはひとつのテーブルからしか作れない」という事実に今さらがく然
そんな大切なことなぜ今まで誰からも明かされることがなかったのだろう
世界の常識だから?知らない私がバカなんだろうな
情けない限り

*°˖✧˖ゴジ図書館 利用者登録フォーム作り˖✧˖°*
3-9.でリレーションシップによる衝突は避けられるようになったが、新規情報を登録しようとすると同じエラーメッセージが出る。
親子リンクを解除しても、メイン(利用者検索用)とサブ(新規登録用)の参照先(レコードソース)が同じクエリであることから、結局は競合してしまうのだろう。
そこで、サブ(新規登録用)のレコードソースをクエリからマスタテーブルへ切り替えてみたが、今度は「レコードの追加や編集ができないから、双方を親子リンクさせてくれ」と苦情が出る。
また、1フォーム1テーブルの課題がある。

~修正(੭ु;・∀・)੭ु⁾⁾~
1.サブフォームの各コントロールをメインフォームに集約し、サブを撤去
2.クエリで結合させていた「利用者マスタ」と「図書利用券マスタ」を「利用者マスタ」に一本化し、メインのレコードソースとする
3.コンボボックスの値集合ソースをテーブルに変更
4.テーブル改編による列数変更に伴い、コンボボックス(書式)の列数および列幅の見直し
5.テーブル改編による列数変更に伴い、コンボボックス(データ)の連結列を[1]に戻す
6.テーブル改編による列数変更に伴い、各コントロールのcolumn関数の数字をひとつずつ置き換える
7.クエリ上で算出していた「登録日の3年後の誕生日」利用期限とする計算式はフォームに置く
8.修正7に伴い、フォームを読み込む際(コンボのセット前)誕生日や登録日が空白であるために生じる「#Type!」エラーコード解消のため、式を修正
【いままで】
=DateSerial(Year([登録日]) + 3, Month([誕生日]), Day([誕生日]))
※クエリに書き込むときは=ではなく、利用期限:DateSerial(Year([登録日]) + 3, Month([誕生日]), Day([誕生日]))
【これから】
=IIf(IsNull([登録日]) Or IsNull([誕生日]),Null,DateSerial(Year([登録日])+3,Month([誕生日]),Day([誕生日])))
※「利用期限」フィールドは計算式なので本来テーブルには含めないが、コントロールはフォーム作りの骨組みとして役立つので加えている
9.新規利用者のレコードをテーブルへ直ちに反映させるためのコマンド
Private Sub 保存_Click()
DoCmd.RunCommand acCmdSaveRecord
Me.Refresh ←なくても動くが、あった方がコンボへの搭載が早いみたい
End Sub

無事にコンボボックスが稼働し、新規利用者の入力が叶い、登録情報もきちんと確認できる最低限のフォームへと辿り着くことができた
めでたし、めでたし*°˖✧(*˘-˘*)✧˖°*



サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す