0

あなたが尋ねる前に、私は何週間もこれをグーグルで検索しましたが、役に立ちませんでした。現在、Microsoft Access 2007 を使用してビジネス用のデータベース システムを設計しています。システムは問題なく動作しますが、修正が必要な点がいくつかあります。

現在、私は2つのフォームを持っています。

Login_FRM - ログイン画面であるフォーム。現時点でのこのボックスのコードは

If IsNull(Me.Username) Or Me.Username = "" Then
        MsgBox "You must enter the username of an active employee.", vbOKOnly, "Required Data"
            Me.Username.SetFocus
        Exit Sub
    End If

If IsNull(Me.PasswordLookup) Or Me.PasswordLookup = "" Then
        MsgBox "You must provide a password.", vbOKOnly, "Required Data"
            Me.PasswordLookup.SetFocus
        Exit Sub
    End If


    Me.PasswordLookup.Value = DLookup("[Password]", "User_TBL", "[Username] ='" & Me.Username & "'")

    If Me.PasswordLookup.Value = Me.PasswordLookup.Value Then

    DoCmd.OpenForm "MainMenu_FRM"

    Else
            MsgBox "Incorrect Username or Password. Please try again.", vbOKOnly, "Please try again"
        Me.PasswordLookup.SetFocus
        Exit Sub
    End If    
End Sub

これは、null などをチェックしますが、User_TBL に格納されているフィールドに対してもチェックして、ユーザーがアクセスできるかどうかを確認します。

また、データベースのすべてのプロセスの主要な出発点である MainMenu_FRM もあります。

基本的に私がやりたいことは、User_TBL に管理者として登録されている場合 (はい/いいえ)、管理者メニューへのユーザー アクセスのみを許可することです。

誰かが助けてくれたらとても助かります。

ありがとう

ここでは、プロセス全体の簡単な概要を示します

  1. ユーザー/管理者ではない/がログイン画面で表示されます。

  2. ユーザーが詳細を入力してログインをクリックすると、メイン メニューにアクセスできます。

  3. メインメニューの管理ボタンをクリックします。アクセスが拒否されます。

4

3 に答える 3

2

ログイン画面を全員に提示して、管理者画面にアクセスしようとしたときに管理者かどうかを確認するのが最善ではないかと思います。

于 2012-11-15T13:42:54.830 に答える
0

あなたがしなければならないことはあなたが思っているよりも簡単だと思います。

管理者のボタンのみを有効にするのフォームロードでifステートメントを実行しMainMenu_FRM、デフォルトを設定して、他のすべてのユーザーに対して無効にするだけです。その後、管理者のみがクリックできます。

管理者もログインする必要がないのはなぜですか?ログインしてもらい、ログイン後に権限を適切に設定してください。

つまり、プロパティですべてのボタンをに設定MainMenu_FRMEnabled = noます。

Private Sub Form_Load()
'****Admin****
If strUserAccess = "Admin" Then
Me.buttonThatTakesYouSomewhere.Enabled = True
Me.buttonThatTakesYouSomewhereElse.Enabled = True


 '****USER****
ElseIf strUserAccess = "User" Then
Me.buttonThatTakesUsersSomewhere.Enabled = True
Me.buttonThatTakesUsersSomewhereElse.Enabled = True
end if

end sub

また、セキュリティ上の理由から、コードにパスワードを設定し、シフトオーバーライドを無効にして、だれも何も壊さないようにしてください。

ログイン名(ログイン画面で一時変数として設定できます)に基づいてDLookupを使用して、テーブルからアクセスレベルを見つけます。

コメントからあなたの2番目の部分ごとに。私はdlookupで一時変数を呼び出したことがないので、それを突き刺すしかありません。それが機能しない場合は、それを正しく行う方法をグーグルで検索する必要があるかもしれません。多かれ少なかれ引用符が必要になる場合があります。

dim strUserAccess as String
strUserAccess = DLookup("fieldname", "tablename", "[UserName]="" & TempVars("Username").value  & "")

if strUserAccess = "Admin" then
...

等々。私はDlookupをタイプミスした可能性があり、これが機能するかどうかは100%確信できませんが、機能するはずです。

于 2012-11-15T13:49:14.477 に答える
0

私は同じ線に沿って何かを設計していTempVars()ますが、ユーザーのログイン結果からユーザーのアクセス許可を挿入すると便利であることがわかりました。ログインからのみ更新され、データベースの他の場所では更新されません。

MSDN からの TempVar に関する情報ですが、Access ブログからのより良い説明があります。

アクセスが制限されている (フォームを開くための) ボタンでは、onclick イベントがユーザー許可変数を評価します。したがってMsgBox、ユーザーがフォームの使用を許可されていない場合は、エラーが発生する可能性があります。

于 2012-11-15T13:27:15.997 に答える