- ベストアンサー
Accessログイン権限の制御方法とは?
- 質問者はAccess2003を使用しており、ログイン画面を作成しているが、管理者と一般ユーザーで分けてログイン後の画面を切り替えたい。
- 現在の仕様ではログイン画面(frm_ログイン)とメイン画面(frm_main、frm_main2)があり、アカウントフィールドで管理者と一般ユーザーを区別している。
- 質問者が作成したVBAコードでは、アカウントに関係なくfrm_mainが開かれてしまうため、アドバイスを求めている。
- みんなの回答 (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つに
その他の回答 (1)
- cistronezk
- ベストアンサー率38% (120/309)
>If アカウント = "1" Then 突然、変数「アカウント」が出現してるようですが、本当は値を取得してるんですか? その値はどうなってます?
お礼
まだAccessは触り始めたばかりでよくわからないので こんな感じかな?と思いつつ適当に記述していたんですがもっと勉強しないといけませんね。 #2さんの回答を参考にやってみたところようやくできました。 ご回答ありがとうございました。
お礼
参考にさせてもらったところようやくできました。 回答だけでなくアドバイスまでいただき感激です。 これから回答していただいたソースコードの理解もしっかりとやっていきたいと思います。 ご回答ありがとうございました。