FileMaker、Access ともにデータを入力するためのフォームをお手軽に作成できる。 FileMaker に慣れていると、 Access のフォームにおいて、微妙な挙動の違いに気がつく。
FileMaker の入力フォーム
FileMaker は、フォームの入力に際して、「新規レコード」を作成しなくてはいけない。(フォームを作成して、はじめてフォームが表示されるときには、「新規レコード」が一つ作成された状態になっている。)
そのため、「レコード削除」をして、すべてのデータを削除した状態でフォームに入力しようとすると、「新規レコード」を作成するように促される。
つまり、「フォームにおける入力する場」と、「レコードの存否」が対応している。
Access のフォーム
これに対して、Access のフォームは FileMaker の動作とは異なる。以下のフォームは、対応するテーブルにデータが全く入力されていない状態である。
メニューを見ても、レコードの削除はできない。よって、テーブルにデータはない。
ここで FileMaker との違いが浮き彫りになる。 FileMaker と同じつもりで、「新規レコードを作成する」に相当する「新しいレコード」を選択しよう思っても選択できない。
しかし、不思議なことに、フォームにデータを入力しようとすると、データを入力することが可能だ。そして、入力をしたと同時に、上記の「レコードの削除」と「新しいレコード」の選択ができるようになる。
つまり、Access においては、FileMaker の「フォームにおける入力する場」が、フォームを開くと同時に自動的に生成されていると類推することができる。ただし、その「場」は全く性質が異なる。フィールドへ入力しただけでは、テーブルにデータは反映されない。意識的に「レコードの保存」を行うか、または、「次のレコードへ移動する」か、「フォームを閉じる」とテーブルに反映される。 FileMaker のように、新規レコードを作成したときにレコードが保存されるのに比べると複雑に感じる。
Access では、フォームに入力しただけでは、データは登録されない。「フォームに入力する場」はあるけれど、テーブルからは独立しているようなものと言えばよいのかな。
オートナンバー型
例えば、オートナンバー型のフィールドがあった場合、オートナンバー型以外のフィールドへの入力がされたときになって、はじめてオートナンバーが生成される。
面倒になること
例えば、以下のように、あるフォームに新しいレコードを作成するときに、同時にそのデータに対応する他のデータを作成したいということがあったとする。
- レコードを作成する
- 特定のルールによって、上記に対応するデータを作成する
FileMaker においては、新規レコードを作成する処理において、同時にデータを作成する処理を加えればよいはずである。これに対して、Access ではデータを生成するタイミングに気をつけなくてはならない。
例えば、新規ボタンを押さなければ、フィールドに入力できないように VBA でコントロールする。新規ボタンを押したときに、レコードを保存し、それと同時に対応するデータを作成。そして、作成したデータを再度フォームに読み込むという手続きをとる必要がある。
手順をまとめると...
- ユーザがフォームを表示させる。
- システムは、フォームのフィールドを操作できないようにする。
- ユーザは、「新規ボタン」を押す。
- システムは、フォームに対応したレコードをテーブルに保存する。同時に、そのレコードに対応した他のテーブルのデータを生成し、テーブルに保存する。フォームの内容をリフレッシュすることによって、ユーザにデータを提示。その後、フォームのフィールドを操作できるようにする。
- ユーザはデータを入力する。
新規レコードの作成においては、フォームの .NewRecord で、テーブルに反映されてないフォームの内容であることを確認した場合、フィールドのロックを解除してデータの生成。そうでない場合は、「新しいレコード」を作成してからロックを解除して、データの生成をする。
うーん 、なんかややこしい。方法が間違ってるのかな... ^^;