Access2000で家族メール? その2 |
||||||||||||||||||||||||||||||||||
2001.06.23 tsuchiya |
||||||||||||||||||||||||||||||||||
これまでにメールサーバーのテーブルと送信フォームが出来ました。 ここで再度メールソフトの機能を確認しておきます。 1.新規メールを書いて送信する。(作成済み) 2.メールを受信して読む。 3.返信メールを書いて送信する。 今日は、2.メールを受信して読む。に挑戦します。 初回に、フラグというフィールドを何気なく追加しました。 ここではメールの状態を示すフラグが重要の役割をします。 メールは送信(1)→受信(2)→返信(3)→受信(4)でワンセットであるべきです。 最後のフィールドのフラグは・・・ と以前書きました。そこで、フラグを詳しく説明するため表を作成しました。 |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
送信者をA(旦那),宛先をC(息子)として解説してみます。 Aがメールを出す(フラグ1)とそのメールはAの送信済みのホルダーに入り、同時にCの受信トレイに入ります。 Cがメールを読むまではAにはCがまだメールを読んでいないことを知らせます。 Cが着信メールありのメッセージに気づき、そのメールを読みます。(フラグ2) AにはCがメールを読んだことを知らせます。 Cが返信メールを書いてAに送ります。(フラグ3) Cの受信トレイのメールは返信メールを含め送信済みホルダーへ移動、 同様にAの送信済みメールは返信メールを含め受信トレイに移動し[返信メールあり]を知らせます。 Aがその返信メールを読むまではCにはAが返信メールを読んでいないことを知らせます。 Aが返信メールを読む(フラグ4)とワンセットの完了です。 A,C共メールのデータを完了済みのホルダーに移動します。 これでメールサーバーテーブルの1レコードが完結したことになります。 たかが1通のメールのやりとりも解析すると結構複雑になりました。 本題(2.メールを受信して読む。)に戻ります。 まずメールを受信するまでを考えます。 Cの立場で考えて見ましょう。 誰かから新規にC宛てにメールが送られたとしましょう。 Cはメールソフトを立ち上げます。 メールサーバーにアクセスします。 着信メールはメールサーバーテーブルのデータから抽出条件 フラグ = "1" AND 宛先 = "C"で得られそうです。 同様にCから新規に誰か宛てに送ったメールの返信が来た場合は抽出条件 フラグ = "3" AND 送信者 = "C" で得られます。 これらのデータを受信トレイに表示すればメールを受信したことになります。 着信メールに表示するフィールドは送信者、送信日時、件名 また、返信メールに表示するフィールドは宛先、返信日時、件名とします。 いずれも特定データをクリックすることにより、フラグを除くすべてのフィールドを表示させます。 それでは具体的に受信トレイのフォームを作成します。 |
||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||
Cが受信トレイを開いた様子です。 設計が楽なのですべてリストボックスです。 リストボックスの値集合ソース(SQLステートメント)を上から順にを示します。 着信メール Cに届いた新規のメールです。 SELECT メールサーバー.送信者, メールサーバー.送信日時, メールサーバー.件名, メールサーバー.宛先 FROM メールサーバー WHERE (((メールサーバー.フラグ)="1") AND ((メールサーバー.宛先)="C")); 返信メール Cに届いた返信メールです。 SELECT メールサーバー.宛先, メールサーバー.返信日時, メールサーバー.件名 FROM メールサーバー WHERE (((メールサーバー.フラグ)="3") AND ((メールサーバー.送信者)="C")); 送信済み Cが送ったメールのうち返事がまだ来ないメールです。フラグ1は相手が未読です。 SELECT メールサーバー.宛先, メールサーバー.送信日時, メールサーバー.件名 FROM メールサーバー WHERE (((メールサーバー.フラグ)="2") AND ((メールサーバー.送信者)="C")) OR (((メールサーバー.フラグ)="1") AND ((メールサーバー.送信者)="C")); 完了済み Cに関係した送受信が完結したメールです。 SELECT メールサーバー.送信者, メールサーバー.宛先, メールサーバー.件名 FROM メールサーバー WHERE (((メールサーバー.送信者)="C") AND ((メールサーバー.フラグ)="4")) OR (((メールサーバー.宛先)="C") AND ((メールサーバー.フラグ)="4")); 簡単ですが、リストボックスでメールを受信する部分まで出来ました。 次に.[メールを受信して読む。] の読むに挑戦しましょう。 リストボックスからデータをWクリックして詳細フォームを開きます。 |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
以上で受信トレイの大体のイメージが出来ました。 ただしメールサーバーから特定のレコードを詳細表示する際、問題が生じました。 そこでメールサーバーテーブルのフィールドの先頭にIDフィールドを追加します。 IDはユニークなキーとして主キーに設定します。データ型は数値型(長整数型)です。 IDは1からの連番ですが、オートナンバー型は使用しません。 新規メールを送信する際、自動発行します。 IDフィールドを追加したメールサーバーテーブルの様子です。 |
||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||
送信者、宛先にAとかBでは解りづらいので送信者テーブル、宛先テーブルを作成します。 旦那はパパ、奥さんはママに変更しました。 下図は宛先テーブルです。 |
||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||
さて準備が出来ました。受信トレイフォームを完成しましょう。 |
||||||||||||||||||||||||||||||||||