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 IfEnd 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)