Access2000で家族メール? その3 |
2001.07.01 tsuchiya |
前回作成した受信トレイを手直しします。 着信メールのリストボックスの値集合ソースを修正します。 SELECT メールサーバー.ID, 送信者.送信者, メールサーバー.送信日時, メールサーバー.件名, メールサーバー.宛先 FROM 送信者 INNER JOIN メールサーバー ON 送信者.ID = メールサーバー.送信者 WHERE (((メールサーバー.宛先)=[OpenArgs]) AND ((メールサーバー.フラグ)="1")); 赤字の部分が変更されました。 メールサーバー.ID メールサーバーテーブルのIDフィールドを追加しました。 実際のリストボックスには表示する必要がありませんが、メールの詳細を出したり返信メールのデータを書き込む時必要になります。 送信者.送信者 前回作成した送信者テーブルとメールサーバーテーブルをリンクすることにより送信者をA,B,・・でなく、 けいちゃんのように表示します。 FROM 送信者 INNER JOIN メールサーバー ON 送信者.ID = メールサーバー.送信者 2つのテーブル間のリンクの様子です。 1対他のリンクテーブルは、SQLでこう表現される訳です。 [OpenArgs] OpenArgsは受信トレイフォームを開くとき他のフォームから貰って来る引数です。 誰の受信トレイを開くかこの引数で決定します。OpenArgsについては後で詳しく説明します。 SQL文に慣れるため(私自身が?)あえて解説しましたが、やはりクエリービューの方が解りやすいです。下図です。 |
![]() |
同様に返信メール、送信済み、完了済みのリストボックスの値集合ソースを変更します。詳細は省略します。 さらにいくつかのテキストボックスとコマンドボタンを追加します。 OpenArgs ="C" として C(けいちゃん)の受信トレイを開きます。 |
![]() |
話が前後しますが受信トレイを開く元のフォームを作成します。 このフォームがスタートアップのフォームになります。(下図) 5人分の名前のボタンをアカウントオプショングループ内に入れます。 例えばパパが押されるとアカウントの値が1、ショウちゃんが押されるとアカウントの値が5になります。 さて下図のスタートボタンにより各者の受信トレイが開く仕組みを作ります。 |
![]() |
先ほどのアカウントの値を変数Accountに代入します。ただし1のときA、2のときB、・・・5のときEとします。 スタートボタンのクリックイベントを作成します。 |
Private Sub スタート_Click() Dim Account As String ’Accountを文字型変数として宣言します。 Select Case アカウント Case 1 Account = "A" Case 2 Account = "B" Case 3 Account = "C" Case 4 Account = "D" Case 5 Account = "E" Case Else MsgBox "アカウントを指定してください。" Exit Sub ’名前のボタンがどれも押されずスタートした場合受信トレイを開きません。 End Select DoCmd.Close ’家族メールへようこそのフォームを閉じます。 DoCmd.OpenForm "受信トレイ", acNormal, , , , acDialog, Account ’Accountを引数にして受信トレイを開きます。 End Sub |
もうお解りかと思いますが、OpenArgsについて解説します。 スタートボタンのクリックイベントの最後の文 DoCmd.OpenForm "受信トレイ", acNormal, , , , acDialog, Account のAccountがOpenArgsに相当します。 Microsoft AccessヘルプからOpenForm メソッドの解説を抜粋します。 Visual Basic で "OpenForm/フォームを開く" アクションを実行します。 構文 DoCmd.OpenForm formname[, view][, filtername][, wherecondition][, datamode][, windowmode][, openargs] OpenForm メソッドには、次の引数があります。 ---中略--- openargs 文字列式です。この文字列式を使ってフォームの OpenArgs プロパティを設定すると、Open イベント プロシージャなどの フォームモジュールの中のコードで使うことができるようになります。OpenArgs プロパティは、マクロおよび式でも、参照できます。 Microsoft Accessヘルプ終わり ところで、家族メールへようこそのフォームにパスワード関係のコントロールがいくつかありました。 当然、1台のパソコンですべての人が使う仕様になる訳ですからセキュリティを考えなくてはなりません。 しかし現在はコントロールを配置しただけで、コードを記述していません。 セキュリティの件は、最終段階で作成することにしましす。 ここまでで、家族メールへようこそのフォームから指定された人の受信トレイを開くことができました。 ここで再度メールソフトの機能を確認しておきます。 1.新規メールを書いて送信する。(作成済み) ←今日は最後に、この部分を完成します。 2.メールを受信して読む。 ←現在はイメージの段階 3.返信メールを書いて送信する。 ←現在はイメージの段階 2.3については次回、完成予定とし、。今日は1を完成します。 |
けいちゃんの受信トレイを例に話を進めてきましたが、受信トレイから新規メールを書くボタンから開くフォームを完成させます。 まず、新規メールを書くボタンのクリックイベントを書きます。 ここでもOpenArgsが活躍します。OpenArgsがリレーのバトン代わりになります。 |
Private Sub 新規メールを書く_Click() |
開いたフォームが下図です。 |
![]() |
この連載の一番最初に作成したフォームを手直ししました。 送信ボタンのクリックイベントを修正します。(2001.07/06一部訂正しました。) |
Private Sub 送信_Click() If Me!宛先 = OpenArgs Then ’ここでもOpenArgsが活躍します。 MsgBox "自分宛にメールは送れません!" Exit Sub End If If Me!宛先 = "" Or IsNull(Me!宛先) Then MsgBox "宛先は?" Exit Sub End If If Me!件名 = "" Or IsNull(Me!件名) Then MsgBox "件名は?" Exit Sub End If If Me!送信内容 = "" Or IsNull(Me!送信内容) Then MsgBox "送信内容は?" Exit Sub End If Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("メールサーバー", dbOpenDynaset) Dim new_ID As Long ’IDを長整数型で宣言します。 rs.AddNew ID発行 new_ID ’ID発行サブプロシージャで新規IDを発行してもらいます。 rs!ID = new_ID rs!送信者 = OpenArgs rs!宛先 = Me!宛先 rs!送信日時 = Now() '現在時刻を記します。 rs!件名 = Me!件名 rs!送信内容 = Me!送信内容 rs!フラグ = "1" '新規のメールであることを記します。 rs.Update rs.Close db.Close Me!宛先 = "" Me!件名 = "" Me!送信内容 = "" MsgBox "メール送信しました。" 受信トレイ更新 ’2001.07.08 この1行追加しました。 End Sub |
Private Sub ID発行(新規ID As Long) Dim rs As Recordset Set rs = CurrentDb.OpenRecordset("メールサーバー") If rs.BOF Then 新規ID = 1 Exit Sub End If 新規ID = DMax("ID", "メールサーバー") + 1 ’メールサーバーテーブルのIDフィールドの最大値に1を加える。 rs.Close End Sub |
Private Sub キャンセル_Click() DoCmd.Close ’無条件にフォームを閉じます。 End Sub |
以上、受信トレイ、新規メールを送信が完成しました。 |