ログイン機能を作ってAccessを学ぶ

こんにちはmasalifeです。

今回はフォームを使った簡易的なログイン機能を作ってみたいと思います。

作るログインフォームは次のイメージです。

システム保守の観点からもログイン機能は作れるとプラスになります。

作るためには複数の関数とVBAの知識が必要となりますが、

学ぶチャンスだと思って、ぜひチャレンジしてみてください。

・DLookup関数

・StrComp関数

・If~elseステートメント

準備するもの

会員名とPasswordを管理するテーブル

会員名とPasswordを管理するテーブルを作成します。

ログイン画面のフォーム

会員名を選択するコンボボックス

テーブルに登録されているデータから選択する場合はコンボボックスを使用すると便利です。

コンボボックスを作成する際はウィザード機能を活用するのがオススメです。

① 【デザイン】タブの青枠のアイコンをクリックしてから、② 赤枠のアイコンをクリックすることでウイザード機能を使用してコンボボックスが作成できます。

コンボボックスに表示する値は会員名とPasswordを管理するテーブルに保存されている会員フィールドの値とするので、赤枠を選択し、【次へ】ボタンをクリックします。


コンボボックスに表示する値が登録されているテーブルまたはクエリを選択し、【次へ】ボタンをクリックします。


コンボボックスに表示する値のフィールドを選択し、【 > 】ボタンをクリックします。


選択したフィールドが赤枠に入っていることを確認し、【次へ】ボタンをクリックします。


必要に応じて、並べ替えを指定し、【次へ】ボタンをクリックします。


必要に応じて、コンボボックスに表示する幅を指定します。

赤線部分をドラッグすることで、好きな幅にすることができます。

指定が終了したら、【次へ】ボタンをクリックします。


コンボボックスに付けるラベル名を入力し、【完了】ボタンをクリックします。

以上でコンボボックスが作成されます。

設定はコンボボックスのオプションでいつでも変更ができるので、仮にの気持ちで作成すればいいと思います。

Passwordを入力するテキストボックス

非連結のテキストボックスを作成します。

【デザイン】タブの赤枠のアイコンでテキストボックスが作成できます。

ログインボタン

ボタンを作成します。

【デザイン】タブの赤枠のアイコンでボタンが作成できます。

ログイン機能を実装する:ボタンのイベントにVBAを記述する

ボタンにログイン機能をVBAで設定します。

会員ごとに登録してあるPasswordと入力したPasswordが全角/半角、大文字/小文字、ひらがな/カタカナを区別して一致していれば成功、一致していなければ不成功のメッセージを出します。

ボタンのプロパティシートを出して、

【イベント】タブのクリック時の【…】アイコンをクリックします。


【コードビルダー】を選択し、【OK】ボタンをクリックします。

VBE画面が起動します。


Dim pas As String

pas = DLookup(“Password”, “T_会員マスタ”, “[会員名] = [Forms]![F_ログイン]![cmb会員名]”)

If StrComp(pas, txtPas, 0) = 0 Then

MsgBox “成功”

Else

Msgbox “不成功”

End If

と記述します。


これでログイン機能の実装が終了です。

試しに、会員名とPasswordを管理するテーブルに会員名とPasswordを登録して、ログイン機能が正しく動作するか試してみてください。

会員名とPasswordが一致していたら成功のメッセージが、一致していなかったら不成功のメッセージが出ると思います。

今回はメッセージを出しましたが、フォームを開くDoCmd.OpenFormメソッドを記述すれば実用的となります。

VBAを読み解く

DLookup関数を考える

pas = DLookup(“Password”, “T_会員マスタ”, “[会員名] = [Forms]![F_ログイン]![cmb会員名]”)

このコードは、登録されている(正しい)Passwordを取得し、変数pasに代入しています。

このコードを理解するためには、DLookup関数の式を知らないといけません。

まとめると次のようになります。

exprには値を返したいフィールド、domainにexprのテーブル・クエリ、criteriaには条件を指定

会員名をmasalifeと選択すると、T_会員マスタの会員名フィールドからmasalifeを検索し、一致するPasswordフィールドの値、Kakuninが得られます。

このKakuninを会員名masalifeに対しての正しいPasswordとして、変数pasに代入しています。

StrComp関数を考える

If StrComp(pas, txtPas, 0) = 0 Then

核となるコードです。

登録したPasswordとログイン画面で入力したPasswordを全角/半角、大文字/小文字、ひらがな/カタカナを区別して比較し、一致しているか否かで条件分岐させています。

そして、比較して一致しているかどうかを判定させるのに使用しているのが、StrComp関数です。

IIf関数やIf文でも比較は出来るため、あまり知られていない関数ですが、 全角/半角、大文字/小文字、ひらがな/カタカナを区別して比較したいときにはとても便利です。

まとめると次のようになります。

string1string2には比較したい文字列、compareには比較の種類を指定
If StrComp(pas, txtPas, 0) = 0 Then

StrComp関数の基本式を理解した上で再度コードを見てみると、

変数pasにはDLookup関数を使用して、登録されているPasswordが代入されており、その登録されているPasswordとログイン画面でtxtpasに入力したログイン用のPasswordと比較し、一致していればStrComp関数は0を戻すため、If~ = 0 Thenで成功のmsgboxを出していることが分かります。

一致しないときは0以外が戻るため、Elseで不成功のmsgboxを出しています。

StrComp関数を詳しく知りたい方はこちらの記事を参考にしてください。

さいごに

日常生活でよく使う機能をAccessで作れないか考えてみると、新しい関数に出会ったり、漠然としていた関数の理解が深まったり、思いがけない気づきを得られます。

そして何より、「Accessでこんなのも作れるんだ」と感動します。(自分がそうだったように・・・)

記事を読んでいただき、少しでもAccessを学ぶことが楽しくなっていただければ幸いです。