スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

メニューの作成

 今回はフォーム編の最後として「メニューの作成」について触れます。メニューというとWindowsの一般的なスタイルとしてメニューバーがあります。しかし、意外に一般ユーザーには人気が無く、業務システムではボタン方式のメニューが標準です。

 ボタン方式のメニューを作成するには無地のフォームに必要なボタンを配置します。ここではF_生徒番号を開くボタンとメニューを終了するボタンを配置します。

 メニューのデザイン

 メニューフォームのプロパティは通常の入力用のフォームと多少変える必要があります。

レコードソース:メニューはどのテーブルとも連結するわけはないので、何も設定しません。
規定のビュー:単票フォームにします。
レコードセレクタ:テーブルに連結しないので「いいえ」です。
移動ボタン:テーブルに連結していないので移動することもなく、「いいえ」です。

以下のプロパティもF_生徒番号と同様にします。
スクロールバー:なし
コントロールボックス:いいえ
閉じるボタン:いいえ
最小化/最大化ボタン:なし

メニューのプロパティ 

 実行してみましょう。ラベルとボタン以外無く、スッキリとしたフォームになったと思います。

メニューの実行結果 

 ここでボタンの動作を割り付けます。生徒入力のボタンのクリックイベントでコードを書きます。

生徒入力ボタンのクリックイベント 

 以下が生徒入力ボタンをクリックしたときのイベントです。

Private Sub 生徒入力_Click()
DoCmd.OpenForm "F_生徒番号"
End Sub

 Docmd.openformはフォームを開くコマンドです。その後ろにブランクを一つ空けてフォーム名を指定します。フォーム名はダブルクオーテーションで囲みます。

 終了ボタンをクリックしたときのイベントです。

Private Sub 終了_Click()
DoCmd.Close
DoCmd.Quit
End Sub

 Docmd.quitはACCESS自体を終了させるコマンドです。

 これでフォームに関しては一通り終わりましたので、現時点の完成版DBを以下からダウンロード出来るようにしておきます。

http://www.mindaccess.com/download/20101223sample.zip

 次回からはレポートに入ります。
スポンサーサイト

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

リレーションシップの設定(連鎖削除)

 前回生徒を削除しても家族が削除されないという現象が発生しました。生徒と家族を連動して削除するためにはリレーションシップを設定する必要があります。このリレーションシップはテーブル設計時に設定しておく事も出来ますが、必須ではありません。便利な面もあるのですが、逆に設定しておくと実際の開発現場では邪魔になる面もあります。例えばデータをコンバートするときなど、一時的にテーブル間で矛盾した状態を作らなければならないときがあります。そんな時データの整合性を担保するリレーションシップが作業上の邪魔になったりします。

 私の考えでは今回のように必要になった時点でリレーションシップを設定するのが実際的ではないかと思います。設定するにはまずメニューバーの「データベースツール」→「リレーションシップ」をクリックします。

 リレーションシップ

 テーブルの表示でT_生徒番号とT_家族を選びます。

リレーションシップ 

 2つのテーブルが表示されたと思いますが、そこでT_生徒番号の生徒番号からT_家族の生徒番号へドラッグすると次のウインドウが現れます。そこで「参照整合性」をチェックし、更に「レコードの連鎖削除」をチェックします。

レコードの連鎖削除 

 すると、T_生徒番号とT_家族が生徒番号同士で連結され、1対多の関係にあることがわかります。
 
リレーションシップ(連鎖削除)

 さてここでF_生徒番号を開き、削除処理を再度実行してみましょう。すると、今度は以下のような確認メッセージが出力されます。ここで「はい」を選択し、テーブルの中身を見てみましょう。

生徒の削除

 今度はT_生徒番号もT_家族も削除されていることが確認出来たと思います。

 次回はいよいよフォームの最終段階として「メニューの作成」について語りたいと思います。

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

テストして不具合を直す

  今回は出来上がったフォームをいろいろ動かして最終テストをしていき、不具合があれば修正していきます。テストしてプログラムの不具合を直す事をデバッグと言います。この段階で設計上の矛盾を発見することもありますが、その時は他への影響範囲を考慮して変更していきます。

 デバッグするときは他の人にも使ってみてもらいます。やはり自分で作っていると間違いはないという前提というか思い込みで作っているのでバグが見つかりにくいものです。他の人の視点から見ると盲点が見つかったり、新たな発見があったりします。実際のプロジェクトでは複数のテスターと呼ばれる人員を配置して行う場合もあります。

 ただ、いろんな人の評価を得て、様々な意見ももらうのもいいのですがやはり十人十色お互いの意見が矛盾することもあります。最終的には設計者の思想を貫くのがシステムというものだと私は思います。

 このFC2ブログにはリクエストという機能があり、改善要望を吸収する仕組みがあるようです。更にそこでは各々の要望に賛成・反対を表明することが出来、ランキング方式で一覧表示されます。この考えは民主的でよく出来た仕組みだと思います。

 さて、F_生徒番号フォームに戻りますが、今まで削除処理に触れてこなかったので、実際にやってみます。家族のメンバーを削除するときはセレクトバーを選択してDELキーを押します。

 家族の削除

 確認メッセージが出るので、「はい」を押します。 

削除確認メッセージ 

 T_家族を見れば、実際に削除されていることが確認出来ると思います。

 次に生徒の削除を行います。操作は家族の時と同様です。F_生徒番号のセレクトバーを選択肢、DELキーを押します。確認メッセージが出るので「はい」を押します。

生徒の削除

 実際に削除されたかどうかをテーブルを開いて確認してみます。すると、T_生徒番号は削除されていますが、T_家族の方が削除されていない事に気付いたでしょうか。

T_家族 

 フォームで表示するときは親となるT_生徒番号のレコードがないので、履歴で見ても表示されず、当然T_家族も表示されることは絶対にないのですが、テーブル上はいわばゴミとして残ってしまいました。この手のバグはありがちなことでフォームの動きだけを一生懸命確認しても見つかることはありません。ストでは実際にテーブルの中を確認する必要があるのです。

 そのゴミが残っていること自体どれだけ問題があるかという事ですが、直接的には他に悪さをするわけではありませんが、無駄な領域を増やしていくとこはデータが増えていった場合のことを考えるとやはりデータベースを管理する観点からすると好ましいものではありません。

 それではT_生徒番号が削除されたときに連動してT_家族が削除されるようにするにはどうすればいいでしょうか。次回でのその事について考えてみたいと思います。

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

フォームの体裁を整える

 フォームの仕上げとして、より使い勝手を良くしていきます。又、エンドユーザーに使用させるにあたってより安全に使ってもらえるよう工夫します。

移動ボタン:レコードを先へ進めたり、後へ戻したりするときに使うボタンですが、単票フォームのF_生徒番号では必要ですが、帳票フォームのF_家族では縦のスクロールバーがあるので不要です。
スクロールバー:F_生徒番号ではなしにしてもいいのですが、表示するモニターの縦の高さが足りないと切れてしまいますので、「垂直のみ」の設定にしました。
コントロールボックス:画面のサイズ変更をさせる必要がないと考え、「いいえ」にしました。
閉じるボタン:「×」ボタンですが、これも不要と考えました。処理の途中で強制的にいつでも終了されるとアプリケーション的には困る場合は「いいえ」にします。安全設計です。しかし、これで逆にフォームを閉じる手段が無くなりました。後述しますが、F_生徒番号に「終了」ボタンを追加することにします。
最小化/最大化ボタン:このボタンも不要と考え、「なし」にしました。

F_生徒番号のプロパティ

 生徒番号フォームのプロパティ

F_家族のプロパティ

家族フォームのプロパティ 

 実行したイメージです。右上の「×」ボタン等が消えてだいぶすっきりしました。左下のF_生徒番号の移動ボタンだけが残っています。終了ボタンをフッター部に追加しました。

フォームのイメージ

 ここで終了ボタンのクリック時イベントでフォームを閉じる処理をコードで書きます。

終了時のクリックイベント 

Private Sub 終了_Click()
DoCmd.Close
End Sub
 Docmd.closeで自分自身を閉じるという意味です。

 DocmdメソッドはACCESSが持っているオブジェクト(フォームやレポート、クエリーのこと)を操作する命令と考えて下さい。フォームやレポートを開いたり、閉じたり、クエリーを実行したりと結構良く使いますので、覚えておくと便利です。Docmdに関してはメニューの作成のところで詳しく扱います。

 次回はフォームの最終チェックに入ります。

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

「日付項目」の書式と定型入力

 日付項目に関しては入力時の「定型入力」と出力時の「書式」があります。そして大きく和暦西暦があります。更に長い書式や短い書式、月日だけを表示したり様々なバリエーションがあり、ACCESSではそれに対応出来るようになっています。

 まずは生年月日からですが、ここでは出力時の表示書式を和暦にしてみます。コンボボックスから選択することも可能ですが、下記の例のように書式に関する構文を知ればより細かい書式で表現することが出来ます。gggで元号を表示します。eeは和暦年、mmが月、ddが日です。¥記号の次にリテラルを繋げれば固定文字の表示が出来ます。詳しくはヘルプを見て下さい。

 生年月日のプロパティ1

定型入力は入力時のフォーマットを規定します。ここではウイザードを使います。

生年月日のプロパティ2 

 和暦日付を選びます。

定型入力ウイザード1 

ここでは何も変更せずに完了します。

定型入力ウイザード2 

 定型入力の構文が設定されます。

定型入力プロパティ 

 実際に実行してみます。入力するときに昭和の時は「S」、平成の時は「H」と最初に元号を入力します。続けて年・月・日を入れていきます。「年」「月」「日」は入力補完文字として常に表示されています。

生年月日入力書式 

 生年月日からカーソルが抜けると、出力用の書式として「S」が「昭和」に自動的に表示が切り替わります。

 生年月日出力書式 

  実際にテーブルにどう格納されたか確認してみましょう。ACCESSでは入力時の書式を和暦にしたとしても、日付型のフィールドには必ず西暦で格納されます。

 生年月日格納形式 

 入学年月日に関しては西暦で入力、出力してみましょう。西暦4桁、スラッシュで区切って入力したい場合は以下のように書式を設定します。
 
入学年月日書式プロパティ 

 定型入力に関してはウイザードで以下のように指定します。

入学年月日定型入力ウイザード 

 定型入力のプロパティが設定されました。

入学年月日定型入力プロパティ 

 実際に入力してみましょう。

入学年月日表示書式 

 卒業年月日も同様に西暦の書式で問題ありませんが、以下のように「日付選択カレンダーの表示」プロパティがあり、「日付」を選ぶと、カレンダーコントロールが起動するようになります。

卒業年月日 日付選択カレンダーの表示 

 実行すると、カーソルが卒業年月日に入ると、カレンダーコントロールのアイコンが表示されるので、それをクリックするとカレンダーが起動し、該当の日付を選択するとセットされるという仕組みです。

卒業年月日入力書式 

卒業年月日カレンダーの表示 

 これで一通り、各種コントロールのプロパティ設定は完了したので、次回ではよりアプリケーションらしく、フォームの体裁を整えていきましょう。

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

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

全ての記事を表示する

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

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

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

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

FC2Blog Ranking

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。