Access2003を使用しています。
ログイン画面を作成しておりログイン自体はできたのですが、
管理者とそうでないユーザーに分けて、ログイン時に管理者であればfrm_mainを、
そうでなければfrm_main2を開くようにしたいのですがうまくいきません。
現在の仕様では、ログイン画面(frm_ログイン)とメイン画面(frm_main、frm_main2)があり
テーブル名:tbl_ユーザー
フィールド名:ユーザー名、パスワード、アカウント
アカウントで"1"が管理者、"2"が一般ユーザー
このようになっています。
ーー以下VBAコードーー
Private Sub rogin_Click()
Dim a
If IsNull(Me.[UserName]) Then
MsgBox "ユーザー名が未入力です"
Me.[UserName].SetFocus
ElseIf IsNull(Me.[password]) Then
MsgBox "パスワードが未入力です"
Me.[password].SetFocus
Else
a = DLookup("パスワード", "tbl_ユーザー", "ユーザー名='" & Me.[UserName] & "'")
If IsNull(a) Then
MsgBox "該当する ユーザー名 は存在しません"
Me.[UserName].SetFocus
ElseIf StrComp(a, Me.[password], vbBinaryCompare) = 0 Then
On Error GoTo Err_rogin_Click
Dim stDocName As String
Dim stLinkCriteria As String
If アカウント = "1" Then
stDocName = "frm_main"
Else
stDocName = "frm_main2"
End If
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.Close acForm, Me.Name
Else
MsgBox "パスワードが違います"
Me.[password].SetFocus
End If
End If
Exit_rogin_Click:
Exit Sub
Err_rogin_Click:
MsgBox Err.Description
Resume Exit_rogin_Click
End Sub
ーー以上ーー
現在はこのようになっているのですが、これだとなぜかアカウントが"1"でも"2"でも
frm_mainが開いてしまいます。
長くなって申し訳ないのですが、アドバイスをお願いします。
No.2ベストアンサー
- 回答日時:
変数「アカウント」に誰も値を代入していないから?
書き方(ADOで)の例となります。
Private Sub rogin_Click()
Dim rs As New ADODB.Recordset
Dim stDocName As String
Dim bOk As Boolean
If (IsNull(Me.[UserName])) Then
MsgBox "ユーザー名が未入力です"
Me.[UserName].SetFocus
Exit Sub
End If
If (IsNull(Me.[Password])) Then
MsgBox "パスワードが未入力です"
Me.[Password].SetFocus
Exit Sub
End If
bOk = False
rs.Source = "SELECT * FROM tbl_ユーザー WHERE [ユーザー名]='" & Me.[UserName] & "';"
rs.Open , CurrentProject.Connection, adOpenKeyset, adLockReadOnly
If (rs.RecordCount = 1) Then ' ★
If (StrComp(rs("パスワード"), Me.[Password], vbBinaryCompare) = 0) Then
If (rs("アカウント") = "1") Then
stDocName = "frm_main"
Else
stDocName = "frm_main2"
End If
bOk = True
End If
End If
rs.Close
If (bOk = True) Then
'ユーザー名・パスワードが一致した
DoCmd.OpenForm stDocName
DoCmd.Close acForm, Me.Name
Else
MsgBox "ユーザー名/パスワード が違います"
Me.[UserName].SetFocus
End If
End Sub
※ エラー処理は盛り込んでください
※ ★部分は、同姓同名がなく、ユーザー名で1件のレコードが抽出されたらの意味
※ ユーザー名・パスワードの入力があった場合、どちらを間違ったか特定させないようにメッセージは1つに
参考にさせてもらったところようやくできました。
回答だけでなくアドバイスまでいただき感激です。
これから回答していただいたソースコードの理解もしっかりとやっていきたいと思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルにユーザー名...
-
メールをパスワードつきで送る方法
-
メールのマナー編
-
メールアドレス 上バーの入力...
-
大学定期試験過去問サイト「過...
-
メールアドレスで上付きのハイフン
-
LINE TCBというところからLINE...
-
メールエラー
-
ビーリアルのユーザー名を変え...
-
メールを返信したら、英語のメ...
-
カカオで退会せずに、アプリだ...
-
CDにパスワードをかける
-
YahooIDをパスワード形式にした...
-
ワードに入力したメールアドレ...
-
YouTubeが毎回ログインしないと...
-
CSVファイルを添付するときにパ...
-
インスタの捨て垢で友達のスト...
-
----- The following addresses...
-
カカオトークを退会せずにアン...
-
runas実行した時にきかれるパス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
Excelのセルにユーザー名...
-
メールをパスワードつきで送る方法
-
steam版 apexのログアウト方法...
-
メールエラー
-
LINE TCBというところからLINE...
-
URLとメールアドレス
-
メールアドレスで上付きのハイフン
-
インスタのアイコンについてるN...
-
メールアドレス 上バーの入力...
-
ユニクロやGUのシフト管理アプ...
-
携帯電話を解約してもSMSの受信...
-
メールアドレスから個人を特定...
-
インスタの捨て垢で友達のスト...
-
スタディプラスではアカウント...
-
Instagramからこんなメールがき...
-
YouTubeが毎回ログインしないと...
-
メールを返信したら、英語のメ...
-
解約済みの iPadについて 解約...
-
メールのマナー編
おすすめ情報