薬剤師とAccessと個人データ管理

Accessで個人データ管理0004.wmv

これで最低限の入力画面ができあがりました。あくまで最低限です。利用が個人に限られる場合はこれでも使えると思われますが、入力を別の人も行う場合はちょっと注意が必要です。何が問題かというと、


1、 データが何もない空白でも追加できてしまう。

2、 カルテ番号の重複登録の対策がない。


最低限この2つに関しては対策しておかないといけないとおもいます。


1、は氏名部分が(またはカルテ番号部分が)空白かどうか?というIF文を追加すればよさそうです。空白を調べる部分を氏名にするか、カルテ番号にするかは、実際の運用方法で多少違うと思います。

先にとりあえず分かるところを登録しておいて・・・という使い方をする場合は氏名を、必ずカルテ番号が分かってからしか入力しないという場合はカルテ番号を調べてください。

ということで氏名部分が空白かどうかは「IsNull」を使えばいいようなので

If IsNull(Me.KN) = True Then

2、に関して、テーブル作成時にカルテ番号の重複登録をできないようにしておいた場合はエラーメッセージが表示され、データが登録できませんが、そのままだとAccessのエラーメッセージが表示され、知らずに登録作業をした人がびっくりしてしまいます。

重複がある場合は先に「カルテ番号がすでに登録されています」のメッセージを表示してほしいものです。

そこで今回はDcount関数を使ってカルテ番号がすでに登録されていないか調べてみたいと思うのですが、そのための「クエリ」を1つ作成してみたいと思います。重複クエリウィザードとかありますが、今回はそれは使いません。

クエリの新規作成から

まずは「KNO」だけ選択して完了

名前は何でもいいのですが、「KNO」にしてデザイン編集へ

これに抽出条件を入れてみます。直接入力してもいいのですが、抽出条件部分を右クリックすると「ビルド」というのが表示されるので利用してみましょう 。

最終的にダブルクリックすると目的のものが選択できます。上図のようになったらOKを押してください。

テーブル「KD」の中で、「入力フォームのカルテ番号と同じ番号があれば表示しろ。」

という意味です。当然あってはいけないのですが。

では上書き保存してこれをデータ追加画面に利用します。

If DCount("KNO", "KNO") < 1 Then

これを追加してあげれば、今登録中のカルテ番号と同じ番号を探してその数が1以下ならば、(つまり登録されていなければ)となるわけです。クエリ「KNO」の「KNO」フィールドを数えてってことです。当然他の方法もあります。

If文の中にIf文が入り込んでいる形になりますので、どのIfにどの処理とEndIfが対応しているか間違わないようにしてください。

上図はクエリを作成し、先に条件を絞りましたが、当然Dcount関数に直接検索条件をつけてもかまいません。その場合は


If DCount("KNO", "KD", "[KNO]=[Forms]![KDT]![KNO]") < 1 Then  


ならば、はじめからクエリなど作成せずにDcount関数とテーブルだけでいいのではという気もします。その通りなのですが、後で作成する修正画面のように、条件が複数あった場合、条件式がややこしくなる場合があるため、このような方法もあるということで、あえてクエリを作成してみました。

これで登録画面が出来上がりです。