見出し画像

7.[PG3]Accessで、データ入力フォーム作成とメール送信してみよう その2

こちら第7回「プログラマー養成講座」のパート2になります!
目次はこちらからご参照下さい!

まずは前回話していたMailSend関数をお渡ししますね。
Accessのファイルを作ったら、「標準モジュール」を作って、これをコピペしておいて下さい。現状はメールは飛ばない設定にしてあります。この関数を呼び出したら、無条件に「True」を返して終わりになります。
他の設定がすべて正常に動くようにプログラムが書けたら、MailSend関数でメールが飛ぶような設定を入れましょう。

師匠
'要 Microsoft CDO for Windows 2000
Public Function Mailsend(strFrom As String, strTo As String, strCC As String, strTitle As String, strBody As String, strFilepath As String) As Boolean

    Mailsend = True
    Exit Function
    
    On Error GoTo Err_Exit
    
    Dim objCDO
    Dim MSgw
    
    Mailsend = False
    Set objCDO = CreateObject("CDO.Message")
    
    'CDOのスキーマを定義
    MSgw = "http://schemas.microsoft.com/cdo/configuration/"
    
    With objCDO.Configuration.Fields
        'メール送信方法
        .Item(MSgw & "sendusing") = 2
        
        'SMTPサーバーのアドレス
        .Item(MSgw & "smtpserver") = "XXX.XXX.XXX.XXX"
        
        'SMTPサーバーのポート
        .Item(MSgw & "smtpserverport") = 25
        
        '差出人ユーザー名
        .Item(MSgw & "sendusername") = strFrom
        
        '認証コード
        '.Item(MSgw & "sendpassword") = "xxxxx"
        
        'SSL認証要
        .Item(MSgw & "smtpusessl") = False
        
        '認証方式(1)
        .Item(MSgw & "smtpauthenticate") = cdoBasic
        
        'タイムアウト
        .Item(MSgw & "smtpconnectiontimeout") = 60
        
        .Update
    End With
     
    '差出人メールアドレス
    objCDO.from = strFrom
    
    'あて先メールアドレス
    objCDO.To = strTo
    
    'CCメールアドレス
    objCDO.CC = strCC
    
    'BCCメールアドレス
    'objCDO.BCC = ""
    
    '件名
    objCDO.Subject = strTitle
    
    '本文
    objCDO.TextBody = strBody
    
    '文字化け対応のため追加
    objCDO.TextBodyPart.Charset = "ISO-2022-JP"
     
    '添付ファイル
    If strFilepath <> "" Then objCDO.AddAttachment strFilepath

    objCDO.Send

    Mailsend = True

    Exit Function
    
Err_Exit:
    'MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical, "cdoSendMail()"
       
End Function

Accessファイルを作成して、まず「標準モジュール」・・・
どこだ・・・
「作成」メニュータブの中にありました!
「標準モジュール」で、開いたところに師匠の書いたものをコピペっと。

お題1は、「フォーム」と「テーブル」を作成するところで、単票フォームとかで、データ連携する形にすればいいんですよね。自分の理解だとそうなってますので、進めていきます!
・・・とはいえ、職場にもともとあるAccessファイルを使ったことはありますが、1から作ったことなんてないんですよね。実は・・・。
どっちから作ればいいかわかりませんが、師匠がデータ項目を書いてくれてるので、「テーブル」から作ってみます。

さっき「標準モジュール」つくった「作成」メニュータブに「テーブル」もありますね。


ここに作っていけばいいのかな。「短いテキスト」って50文字あるのかすらわからない・・・。

わからないことは、検索してみましょう。
「Access 短いテキスト」とかで検索するだけでわかると思いますよ!

師匠

あ、そうでした。中途半端に「Accessはわかります」って言ったから、調べるってことが頭の中から抜けてました!調べていいんですもんね!
ふむふむ、243文字なら大丈夫ですね!
「長いテキスト」だと4000文字まで設定できる!
「MailBody」だけ「長いテキスト」で、それ以外は「短いテキスト」ですね!

ちなみに、今見ているのは「データビュー」といって、基本的にはデータ編集をする画面ですね。
ちょっと上のほうにある「テーブル1」あたりで右クリックすると「デザインビュー」が開くことができて、こちらがテーブルの構成や設定を変更する画面になります。

師匠

こっちのほうが設定が見やすいですね。下の方にある「フィールドプロパティ」画面の「フィールドサイズ」が文字数になるのかな?

Accessのフィールドサイズは最大文字数のことであってますね。マウスカーソルを「フィールドサイズ」において右側の説明文を見ると書いてあります。良く見ると設定できる最大文字数も書いてありましたね。

師匠


新設設計ですね!「標題」ってところに、日本語のフィールド名を入れたら「テーブル」の作成は終わりかな。ここからやっと「フォーム」の作成ですね。1からフォームを作ったことないからドキドキしますね。

「フォーム」ってところを選択すれば、順番に作成してくれる手順みたいなのが出てくれるとありがたいんだけど・・・。

!?
あれ、できました? これ?

フォームができましたね!
そしたら1個だけ修正して欲しいのですが。

ちょっとこれは説明していなかったのですが、
今回「メール送信日時」はフォームでは入力せず、
メール送信時に自動的に入るようにしたいと思っています。

なので「メール送信日時」はフォームの入力ボックスは削除して、テーブルの「メール送信日時」の「既定値」が空であることを確認して下さい。そのうえでフォームから新しいデータを登録した場合に、「メール送信日時」が空で登録されていることを確認しましょうか。

お題1はこれでも完了になります。

師匠

これって、ちゃんとテーブルが作れれば、
割と誰でも簡単にフォームは作れるってことですか。今まで、職場で作ってあるもの使うだけでしたが、これだけ簡単だともう少し他のこともAccessにできそうな気がしますね!

自分で使うだけとしたら、Accessはこれでも十分だと思います。
Accessをちゃんとした「開発事業」として扱うとか、
他の人に「業務」として使ってもらうなら、
「フォーム」にはもうちょっと手を加える必要があります。
今、自動的に作られた単票フォームは、
・データの入力規制が文字数しかない
・見た目的なデザインをもうちょっと工夫したい
・「登録」「編集」するときに、メッセージを出したい
・レコードセレクタなどの使わなそうな機能をOFFにしたい
などなどの修正をする必要があります。

今はメールアドレスの欄に「あいうえお」と入力してもエラーにならないので、そのままメール送信までやられちゃうと困りますよね。
入力規制は「ちゃんとしたメールアドレスか」の確認をするものです。
それにはメールアドレスとして使えない文字や、メールアドレスの形式を調べることが必要となります。例えば「@」がないメールアドレスは存在しないので「@」が入っていることなどもチェックする必要がありますよね。

師匠

ふむふむ。なるほどです。入力規制は納得なんですけど、「登録」「編集」でメッセージを出したいってなんでですか?

今は、最後のフィールドでエンターを押したら、すぐにレコードが登録完了してしまいます。重要なデータだったら、一回確認のメッセージを入れてから登録したいですね。このテーブルの情報が、重要であれば「確認メッセージ」は必要です。

師匠

いまいち実感がわきません。エンター押したらすぐ登録の方が楽じゃないでしょうか?なぜ「確認メッセージ」がいるのですか?

では、
「学年学級」「生徒名簿」「費用関連」
などのテーブルがあるとしますね。

このデータは見てわかる通り、とある学校の生徒に関する情報が色々格納されているAccessのようですね。

最初に紙ベースでの申し込みがあり、その後の修正依頼があれば都度修正することにしましょう。また1回登録や修正するごとに「ログ」を取ることにします。ログとは操作履歴のことです。個人データの登録や修正をするときに、操作履歴をとるのならば、極力「問い合わせ1回」で「ログ1個」になることが理想です。もっと厳しいシステムの場合、「登録」「修正」のほかに「閲覧」ですらログを取ることもあります。ログを取るということは「誰」が操作しているかを保存することになります。ということは「ログイン」機能が必要になり、ログインユーザーに対して、アクセス権限を付与する機能が必要になってきますね。こういう風に仕様/設計を考えていくと、徐々に開発規模が大きくなっていきますね!

ちなみに「学年学級」には何年度の何クラスについての「担任」「専攻」などの情報が入っています。
「生徒名簿」には生徒の「姓名」「ふりがな」「生年月日」「住所」「親氏名」「親勤務先」「緊急連絡先」などの情報が入っています。
「費用関連」テーブルには、「給食費」「修学旅行積立」などのお金関連のデータが入っていることにします。

あとはこれらのデータを入力する目的を考えてみましょう。「個人データの保存」すること自体が目的の1つでありますが、「全体数の把握」「給食費の未払いチェック」「生徒が怪我した時の連絡先紹介」などに利用することになると思います。それぞれの場合に、データを抽出するフォームやレポートを準備する必要があります。

インプットとアウトプットを、誰がどういう作業を行うかを、トータルで考えて実装していくのが、システムエンジニア/プログラマーの役割です。

ちなみにここまで「設計」「デザイン」「操作性」「出力方法」などを考えてAccessが作れれば、10万円~20万円クラスの開発になると思います。

師匠

なるほど!!
まだ自分は、どこか「研修」「本物じゃない」という認識で作っていましたが、実際の想定ケースを考えると、確かに「確認メッセージ」が必要なときもあるのですね。

あとはじめて具体的な値段の話まで出てきて、ちょっとテンションあがりました!「フォーム」をちゃんとした「ツール」まで完成度を高めるには、まだ時間がかかると思いますが、値段の話が出ると一気に身が引き締まりました!!

ということで、お題1が完了となります!


この記事が気に入ったらサポートをしてみませんか?