ID, パスワードが一致したらフォームを開く
ID, パスワードを登録したテーブルがあり、ログイン用のフォームでIDとパスワードをユーザーに入力してもらい、IDとパスワードがテーブルのものと一致したら、次のフォームが開くようにしたいのです。
知恵袋で上記のような質問がありました(一部改変)。以前にも同じような質問に回答したことがあります。
WEB検索すればありそうなのですが、そのものズバリは意外とないようですので、アップしておきます。
難易度:
仕様
テーブル名 T_ID_pass
フィールド | データ型 |
---|---|
ID | テキスト型 |
pass | テキスト型 |
ログインフォーム F_LogIn
ID入力テキストボックス txtID
パスワード入力テキストボックス txtPass
ログインコマンドボタン cmdLogIn
下記の設定にしておくのをお勧めします。
ログインフォームを「起動時のオプション」でに最初に開くフォームに指定。「作業ウィンドウ固定」を「はい」にしておく。txtPass の「定型入力モード」を「パスワード」に設定。
ログイン完了後、呼び出されるフォーム F_入力
モジュール
ログインボタンのクリック時
Private Sub cmdRogIn_Click() Dim Res If IsNull( Me .txtID) Then MsgBox "IDを入力してください" Me .txtID.SetFocus Exit Sub End If If IsNull( Me .txtPass) Then MsgBox "パスワードを入力してください" Me .txtPass.SetFocus Exit Sub End If Res = DLookup( "Pass" , "T_ID_pass" , "ID='" & Me .txtID & "'" ) If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" Me .txtID.SetFocus Exit Sub End If If Res = Me .txtPass Then DoCmd.OpenForm "F_入力" '----ID,pass合致でフォームを開く。 DoCmd.Close acForm, "F_LogIn" Else MsgBox "パスワードが異なります。" , vbOKOnly + vbCritical Me .txtPass.SetFocus End If End Sub |
注: これはあくまでフォームでIDとパスワードのチェックをするだけのもので、セキュリティを考慮したものではありません。
エラー対策、SQLインジェクション対策
上記のコードでは実は、txtID に引用符(')を含む文字列を入力されるとエラーになります。さらには、SQLインジェクションを利用されるおそれもあります。例えば、txtID に
Res = DLookup( "Pass" , "T_ID_pass" , "ID='" & Me .txtID & "'" ) If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" |
対策としては、引用符(')を '' に置換してエスケープさせることで、回避できます。
Res = DLookup( "Pass" , "T_ID_pass" , _ "ID='" & Replace( Me .txtID, "'" , "''" ) & "'" ) If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" |
サンプルMDB が下記からダウンロードできます。
FrmRogIn_07.zip (Access 2007 形式 - 18kb)
FrmRogIn.zip (Access 2002-2003 形式 - 17kb)
FrmRogIn_2k.zip (Access 2000 形式 - 17kb)