FC2ブログ

生徒と家族の連携(その2)

  プログラムの実装段階にきて当初の設計通りに行かなくなることは現場ではよくあります。どんなに綿密に設計・計画したとしても途中で軌道修正する必要に迫られるのはよくあることなのです。技術的に困難なことに気づく、設計上の矛盾に気づく、クライアントからの仕様変更等。

 その際必要なことは最も変更による影響が少なく、修正工数が少ない代替案を考えることです。

 ここで家族番号のコード体系についてもう一度見直してみます。改めて考えるとT_家族には生徒番号のフィールドが存在するのに家族番号の一部に生徒番号を含めておく必要はなかったかもしれないですね。つまり連番だけでよかったのです。そして主キーである家族番号の役目を考えるとユニークであることを担保できればいいのです。

 実はユニーク性を保証し、自動的に番号が振られる便利な型がACCESSにはあります。『オートナンバー型』です。これはレコードが挿入される時点つまりレコードに最初の文字が入力された時点で番号が振られます。ここでは家族番号をオートナンバー型に変更します。

 システム開発の途中でテーブルの型を変更するという行為は結構よくあってその時には他プログラムへの影響を考慮すればいいのですが、システムが実際に稼働して運用中に型を変更する必要に迫られる事もまれにあります。その時は実際に本番データが格納されていますので、データのコンバートが必要になります。場合によってはコンバート用のプログラムを用意しなければならない事もあります。ACCESSの場合は比較的簡単に移行作業が出来ます。データが格納されている状態でデザインで型を変更する事が可能です。又どうしても変換ロジックが必要になる場合でもクエリーのみで一括置換が可能な場合が多いです。

 家族番号がオートナンバーで自動採番されるようにしたのでF_家族の家族番号は入力されないように使用不可にします。

 それでは実際にプログラムを動かして家族の入力をしてみましょう。家族の名漢字を入力を始めた段階で、家族番号が振られていくのがわかります。オートナンバー型はデータが挿入されるタイミングで番号が振られます。2行目を入力すれば自動的に一連番号として振られていきます。

 ここで2行目の入力途中でESCキーを入力して入力を破棄してみて下さい。そしてもう一度入力を開始してみて下さい。すると又番号が振られますが、今度は番号が飛んだことがわかると思います。この現象はACCESS自身がオートナンバー型のフィールドの番号を管理するテーブルを内蔵していて番号を振った時点で更新している事を意味します。なので仮に入力途中でキャンセルをかけたとしてもそのキャンセルはT_家族のレコードに対する更新破棄を意味するだけであり、内蔵している管理テーブルまではキャンセルされません。それで次の入力では番号が飛んでしまうのです。

 この番号が飛ぶという事をどう捉えるかですが、主キーの本来の目的であるユニーク性を担保するのを優先すればなんら問題になりません。仮にマルチユーザーでこのテーブルを共有していたとしても番号が被ることはありません。ただし、番号が必ず連番になっていることがシステム上の要件であったり、見た目上も番号が飛ぶのはよろしくないとユーザーが要望してきたらここは考慮する必要があります。場合によっては番号をあえて見せない方法もあります。本来家族番号が必要だったのはシステム上の理由からであり、ユーザーにとってみたら家族を識別するのに番号は必要ありませんから。

 さて生徒及び家族を何件か入力したところで実際に登録されているかテーブルを直接開いて確認してみます。T_家族の生徒番号が画面から入力していないのにも関わらず格納されたのがわかると思います。これはどのタイミングで入力されたかといいますとT_家族の入力が完了し次の行にカーソルが移った段階か、次の生徒の入力にレコードが移動した段階か又はフォーム自身が閉じられた段階です。つまりT_家族のレコードが保存される直前にACCESSが自動的に生徒番号をセットしてくれます。ACCESSに親フォームと子フォームがどんな情報で繋がれているかを教えていたのが、『リンク親フィールド』と『リンク子フィールド』でした。

 この仕組みがACCESSのサブフォームの特徴であり、連結フォームでサブフォームを使う場合にコードレスで実装出来ているこの仕組みを理解し、活用しないとすごくもったいない事になります。

 ここまでで入力フォームの大まかな形は出来たので、次回以降各コントロールの調整に入っていきます。

 参考までにここまでの解説で作ってきた生徒番号.accdbを以下からダウンロード出来るようにしておきます。

サンプルデータベースのダウンロード
関連記事
スポンサーサイト



テーマ : データベース
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
全記事表示リンク

全ての記事を表示する

月別アーカイブ
カテゴリ
お問い合わせ
まずはこちらのフォームより御一報下さい。

名前:
メール:
件名:
本文:

検索フォーム
RSSリンクの表示
アクセスランキング
[ジャンルランキング]
コンピュータ
677位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
96位
アクセスランキングを見る>>
ブログランキング

FC2Blog Ranking