アプリ版:「スタンプのみでお礼する」機能のリリースについて

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が開いてしまいます。

長くなって申し訳ないのですが、アドバイスをお願いします。

A 回答 (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つに
    • good
    • 0
この回答へのお礼

参考にさせてもらったところようやくできました。

回答だけでなくアドバイスまでいただき感激です。
これから回答していただいたソースコードの理解もしっかりとやっていきたいと思います。

ご回答ありがとうございました。

お礼日時:2009/10/13 12:54

>If アカウント = "1" Then



突然、変数「アカウント」が出現してるようですが、本当は値を取得してるんですか?
その値はどうなってます?
    • good
    • 0
この回答へのお礼

まだAccessは触り始めたばかりでよくわからないので
こんな感じかな?と思いつつ適当に記述していたんですがもっと勉強しないといけませんね。

#2さんの回答を参考にやってみたところようやくできました。

ご回答ありがとうございました。

お礼日時:2009/10/13 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!