Solved: Open report with password in access

Status
This thread has been Locked and is not open to further replies. Please start a New Thread if you're having a similar issue. View our Welcome Guide to learn how to use this site.

jmk909er

Thread Starter
Joined
May 20, 2009
Messages
356
I have a command button that opens a form that needs to be for admin only. How can I do that? password the command button? Password the report? I dont know how to write the code for it. The report is "AllRecords"

Help! thanks, Joe
 

Keebellah

Hans
Trusted Advisor
Joined
Mar 27, 2008
Messages
6,641
Hi Joe,

I use this vba code to prompt for a password, maybe you can build it into your Ms Access, I normally use it in Excel but just tested it with Ms Access 2010 to see if it works and it does

Code:
Option Compare Database
Option Explicit

'Attribute VB_Name = "PasswordModule"
'Last Update: 16-05-2009
'////////////////////////////////////////////////////////////////////
'Password masked inputbox
'Allows you to hide characters entered in a VBA Inputbox.
'
'Code written by Daniel Klann
'http://www.danielklann.com/
'March 2003

'// Kindly permitted to be amended
'// Amended by Ivan F Moala
'// http://www.xcelfiles.com
'// April 2003
'// Works for Xl2000+ due the AddressOf Operator
'////////////////////////////////////////////////////////////////////

'********************   CALL FROM FORM *********************************
'    Dim pwd As String
'
'    pwd = InputBoxDK("Please Enter Password Below!", "Database Administration Security Form.")
'
'    'If no password was entered.
'    If pwd = "" Then
'        MsgBox "You didn't enter a password!  You must enter password to 'enter the Administration Screen!" _
'        , vbInformation, "Security Warning"
'    End If
'**************************************


'API functions to be used
Private Declare Function CallNextHookEx _
    Lib "user32" ( _
    ByVal hHook As Long, _
    ByVal ncode As Long, _
    ByVal wParam As Long, _
    lParam As Any) _
As Long

Private Declare Function GetModuleHandle _
    Lib "kernel32" _
    Alias "GetModuleHandleA" ( _
    ByVal lpModuleName As String) _
As Long

Private Declare Function SetWindowsHookEx _
    Lib "user32" _
    Alias "SetWindowsHookExA" ( _
    ByVal idHook As Long, _
    ByVal lpfn As Long, _
    ByVal hmod As Long, _
    ByVal dwThreadId As Long) _
As Long

Private Declare Function UnhookWindowsHookEx _
    Lib "user32" ( _
    ByVal hHook As Long) _
As Long

Private Declare Function SendDlgItemMessage _
    Lib "user32" Alias "SendDlgItemMessageA" ( _
    ByVal hDlg As Long, _
    ByVal nIDDlgItem As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) _
As Long

Private Declare Function GetClassName _
    Lib "user32" _
    Alias "GetClassNameA" ( _
    ByVal hWnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) _
As Long

Private Declare Function GetCurrentThreadId _
    Lib "kernel32" () _
As Long

'Constants to be used in our API functions
Private Const EM_SETPASSWORDCHAR = &HCC
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5
Private Const HC_ACTION = 0
Private hHook As Long

Public Const cAdminPW As String = "[COLOR="Red"][B]admin[/B][/COLOR]"       ' <<< This is your password

Function AskPassword() As Boolean
Dim x
Dim AllowIt As Boolean
AllowIt = False
On Error Resume Next
x = InputBoxDK("Enter password", "PASSWORD REQUIRED")
If Err > 0 Or x = "" Then
    Exit Function
End If
If x <> cAdminPW Then
    MsgBox "Incorrect password!", , ""
Else
    AskPassword = True
End If
End Function

Public Function NewProc(ByVal lngCode As Long, _
                        ByVal wParam As Long, _
                        ByVal lParam As Long) As Long

Dim RetVal
Dim strClassName As String, lngBuffer As Long

If lngCode < HC_ACTION Then
    NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
    Exit Function
End If

strClassName = String$(256, " ")
lngBuffer = 255

If lngCode = HCBT_ACTIVATE Then    'A window has been activated
    RetVal = GetClassName(wParam, strClassName, lngBuffer)
    If Left$(strClassName, RetVal) = "#32770" Then  'Class name of the Inputbox
        'This changes the edit control so that it display the password character *.
        'You can change the Asc("*") as you please.
        SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0
    End If
End If
   
'This line will ensure that any other hooks that may be in place are
'called correctly.
CallNextHookEx hHook, lngCode, wParam, lParam

End Function

'// Make it public = avail to ALL Modules
'// Lets simulate the VBA Input Function
Public Function InputBoxDK(Prompt As String, Optional Title As String, _
            Optional Default As String, _
            Optional xPos As Long, _
            Optional Ypos As Long, _
            Optional Helpfile As String, _
            Optional Context As Long) As String
   
Dim lngModHwnd As Long, lngThreadID As Long
   
'// Lets handle any Errors JIC! due to HookProc> App hang!
On Error GoTo ExitProperly
lngThreadID = GetCurrentThreadId
lngModHwnd = GetModuleHandle(vbNullString)
   
hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
If xPos Then
    InputBoxDK = InputBox(Prompt, Title, Default, xPos, Ypos, Helpfile, Context)
Else
    InputBoxDK = InputBox(Prompt, Title, Default, , , Helpfile, Context)
End If

ExitProperly:
UnhookWindowsHookEx hHook

End Function
It's just simply calling the function and if the answer is true its OK

If AskPassword = False then exit sub

The password is hardoced in the vba (see red text)

You will have to hide the VBA Project nad use a password to display it, to keep the password secret
 

jmk909er

Thread Starter
Joined
May 20, 2009
Messages
356
I need a much simpler solution and have found this:

Private Sub Command81_Click()
If "facdiv" = InputBox$("Enter Password", "Limited Access") Then
DoCmd.OpenReport "AllRecords"
Else
MsgBox "You're not allowed to see this."
End If
End Sub

This solution is working except that when I put in the password and hit enter it prints the report out! What do I need to do to just open the report??

Thanks
 

Keebellah

Hans
Trusted Advisor
Joined
Mar 27, 2008
Messages
6,641
don't add the print command, you exceute DoCmd.OpenReport xxx and that is what it does.
What did you want it to do?
 

jmk909er

Thread Starter
Joined
May 20, 2009
Messages
356
I figured it out:

DoCmd.OpenReport "AllRecords", acViewReport

I put ",acViewReport" on the end, I guess the default without it is to print
 

Keebellah

Hans
Trusted Advisor
Joined
Mar 27, 2008
Messages
6,641
True, I'm not that hot with Access.
Don't forget the "Mark Solved" button if you haven't already done so.

:)
 
Status
This thread has been Locked and is not open to further replies. Please start a New Thread if you're having a similar issue. View our Welcome Guide to learn how to use this site.

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

As Seen On
As Seen On...

Welcome to Tech Support Guy!

Are you looking for the solution to your computer problem? Join our site today to ask your question. This site is completely free -- paid for by advertisers and donations.

If you're not already familiar with forums, watch our Welcome Guide to get started.

Join over 807,865 other people just like you!

Latest posts

Members online

Top