Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Βοήθεια με κώδικα σε login form (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5601-boitheia-me-kodika-se-login-form.html)

jamman 20-07-20 18:23

Βοήθεια με κώδικα σε login form
 
Καλησπέρα σας. Θα ήθελα τη βοήθεια σας σχετικά με διόρθωση-πρόσθεση κώδικα σε μία φόρμα login. Έχω έναν πίνακα tbl_Users με πεδία lngUserID (Α/Α) , strUserName , strUserPassword , Permission (με τιμές Admin ,User). Μετά από πολύ ψάξιμο βρήκα διάφορα και παραμετροποίησα κάποιους κώδικες στη frm_Login οι οποίοι δουλεύουν μια χαρά. Θα ήθελα όμως να θέσω κάποιους περιορισμούς σε αυτούς που μπαίνουν ως Users. Δηλαδή από τη στιγμή που βάζουν το σωστό password να τους ανοίγει η frm_Home αλλά να μην βλέπουν ribbon , παράθυρο περιήγησης κτλ , ενώ αυτός που μπαίνει ως Admin να μην έχει περιορισμούς και επίσης κάπου είχα διαβάσει ότι σε έναν άλλον πίνακα μπορώ να βλέπω ποιος μπήκε και τι αλλαγές έκανε , σχετικό εδώ , αυτό θα το παλέψω και πιστεύω να τα καταφέρω.
Παραθέτω τον κώδικα , γιατί η βάση είναι 25MB και θα την ανεβάσω μόλις μπορέσει κάποιος να με βοηθήσει. Ευχαριστώ.

Παράθεση:

Option Compare Database
Option Explicit
Public intLogonAttempts As Integer

Private Sub cboUser_GotFocus()
On Error Resume Next
cboUser.Requery
End Sub

Private Sub cmdChangePassword_Click()
On Error Resume Next
If IsNull(Me.cboUser) Or Me.cboUser = "" Then
MsgBox "You must enter a User Name.", vbOKOnly, "Administrator Message"
Me.cboUser.SetFocus
Exit Sub
End If
If IsNull(Me.txtPassword) Or Me.txtPassword = "" Then
MsgBox "You must enter a Password.", vbOKOnly, "Administrator Message"
Me.txtPassword.SetFocus
Exit Sub
End If

If Me.txtPassword.Value = DLookup("strUserPassword", "tbl_User", "[lngUserID]=" & Me.cboUser.Value) _
Then
lngMyUserID = Me.cboUser.Value
DoCmd.Close acForm, "frm_Login", acSaveNo
DoCmd.OpenForm "frm_PasswordChange"
Else
MsgBox "Your old PASSWORD invalid." & vbCrLf & vbCrLf & "Try again", vbOKOnly, "Administrator Message"
Me.txtPassword = ""
Me.txtPassword.SetFocus
End If

intLogonAttempts = intLogonAttempts + 1
If intLogonAttempts > 3 Then
MsgBox "Contact Administrator.", vbCritical, "Failed!"
Call cmdExit_Click
DoCmd.OpenForm "frm_Login"
End If
End Sub

Private Sub cmdExit_Click()
On Error Resume Next
Application.Quit acQuitSaveNone
End Sub

Private Sub cmdLogin_Click()
On Error Resume Next
If IsNull(Me.cboUser) Or Me.cboUser = "" Then
MsgBox "You must enter a User Name.", vbOKOnly, "Administrator Message"
Me.cboUser.SetFocus
Exit Sub
End If

If IsNull(Me.txtPassword) Or Me.txtPassword = "" Then
MsgBox "You must enter a Password.", vbOKOnly, "Administrator Message"
Me.txtPassword.SetFocus
Exit Sub
End If

If Me.txtPassword.Value = DLookup("strUserPassword", "tbl_User", "[lngUserID]=" & Me.cboUser.Value) _
Then
lngMyUserID = Me.cboUser.Value ....κάπου εδώ το χάνω.... θα ήθελα να βλέπει τιμή από το πεδίο Permission
DoCmd.Close acForm, "frm_Login", acSaveNo
DoCmd.OpenForm "frm_Home"

Else
MsgBox "Password invalid." & vbCrLf & vbCrLf & "Try again", vbOKOnly, "Administrator Message!"
Me.txtPassword = ""
Me.txtPassword.SetFocus
End If

intLogonAttempts = intLogonAttempts + 1

If intLogonAttempts > 3 Then
MsgBox "Are you a valid user?" & vbCrLf _
& "Contact Administrator.", vbCritical, "Failure"
Call cmdExit_Click
End If

End Sub

vraxnakisg 21-07-20 12:02

Καλησπέρα Βασίλη,

Το ζητούμενο σου έχει να κάνει με τον σχεδιασμό της εφαρμογής σου. Υπάρχουν πολλοί τρόποι να κρύψεις ή να εμφάνισης κάποιο αντικείμενο στην Access.

Θα πρέπει να μας δώσεις περισσότερες πληροφορίες για την δομή (menu, Ribbon) της εφαρμογής σου.

Ευχαριστώ.

jamman 24-07-20 11:56

Γιώργο σ'ευχαριστώ για την ανταπόκριση και δοθείσης ευκαιρίας , συγχαρητήρια για τον κόπο και χρόνο που διαθέτεις εσύ και πολλοί άλλοι για να απαντούν στα ερωτήματά μας. Στο θέμα μου. Το πρόβλημα το έχω σε αυτό το σημείο :
Παράθεση:

If Me.txtPassword.Value = DLookup("strUserPassword", "tbl_User", "[lngUserID]=" & Me.cboUser.Value) _
Then
lngMyUserID = Me.cboUser.Value
DoCmd.Close acForm, "frm_Login", acSaveNo
DoCmd.OpenForm "frm_Home"


Else
MsgBox "Password invalid." & vbCrLf & vbCrLf & "Try again", vbOKOnly, "Administrator Message!"
Me.txtPassword = ""
Me.txtPassword.SetFocus
End If
Θα ήθελα πριν μου ανοίξει τη φόρμα (frm_Home) , να ελέγχει το username , to password και το ρόλο (Permission) του κάθε χρήστη , έτσι ώστε αν είναι Admin να έχει πλήρη πρόσβαση σε όλα. Αν είναι User θα έχει περιορισμούς:
SetProperties "StartUpShowDBWindow", dbBoolean, False
SetProperties "StartUpShowStatusBar", dbBoolean, False
SetProperties "AllowFullMenus", dbBoolean, False
SetProperties "AllowSpecialKeys", dbBoolean, False
SetProperties "AllowBypassKey", dbBoolean, False
SetProperties "AllowShortcutMenus", dbBoolean, False
SetProperties "AllowToolbarChanges", dbBoolean, False
SetProperties "AllowBreakIntoCode", dbBoolean, False

Με εκτίμηση,
Βασίλης

vraxnakisg 24-07-20 13:42

1 Συνημμένο(α)
Καλησπέρα Βασίλη,

Δες μια πρόταση.

Διαχειριστής
Username : admin
Password : admin

Χρήστης
Username : user
Password : user

Ευχαριστώ.

exarhos 27-07-20 13:28

Καλημέρα σας. Σας ευχαριστώ για την μέχρι τώρα πολύτιμη βοήθεια σας.
εγώ προσάρμοσα τον κώδικα που βρήκα στην επισυναπτόμενη ΒΔ που ανεβάσατε, πιο πάνω στη δίκη μου εφαρμογή, έχω 3 προβλημάτακια.
1.σε περίπτωση λάθους pass η φόρμα frm_login κλείνει.
2. σε περιπτωση σωστου username, passwprd μου πεταει μυνημα type missmatch
3 θα ήθελα με την εισοδο ενος απλου user εκτος απο ολα αυτα που εχει το mudule να κρυβει - επενγροποιει και ΤΟ NAVIGATION PANE
Σας ευχαριστώ εκ των προτερων Με τιμη

ο Κωδικας είναι ο παρακάτω

Option Compare Database
Option Explicit
Dim intLogonAttempts As Integer
Dim UserGroup As Integer

Private Sub cbo_user_AfterUpdate()

UserGroup = Me.cbo_user.Column(2, Me.cbo_user.ItemsSelected)
Me.Txt_Password.SetFocus
End Sub
Private Sub cbo_user_GotFocus()

On Error Resume Next
Me.cbo_user.Requery
End Sub

Private Sub cmd_login_Click()
On Error Resume Next

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
If IsNull(Me.cbo_user) Or Me.cbo_user = "" Then
MsgBox "You must enter a User Name.", vbOKOnly, "Administrator Message"
Me.cbo_user.SetFocus
Exit Sub
End If

If IsNull(Me.Txt_Password) Or Me.Txt_Password = "" Then
MsgBox "You must enter a Password.", vbOKOnly, "Administrator Message"
Me.Txt_Password.SetFocus
Exit Sub
End If

If Me.Txt_Password.Value = DLookup("Password", "tbl_login", "[UserID]=" & Me.cbo_user.Value) Then

If UserGroup = 1 Then 'Διαχειριστής
EnableProperties
ElseIf UserGroup = 2 Then 'Χρήστης
DisableProperties
Else 'Άλλο (νομίζω ότι εδώ παρουσιαζει το type mismatch)
End If

[/COLOR]
strSQL = "SELECT FirstName FROM tbl_login WHERE Username = """ & Me.cbo_user.Value & """ AND Password = """ & Me.Txt_Password.Value & """"
TempVars("Username").Value = Me.cbo_user.Value
TempVars("Position").Value = Me.Txt_Position.Value
Set db = CurrentDb
Set rst = db.OpenRecordset(strSQL)
Else
MsgBox "Password invalid." & vbCrLf & vbCrLf & "Try again", vbOKOnly, "Administrator Message!"
Me.Txt_Password = ""
Me.Txt_Password.SetFocus
End If
If rst.EOF Then
MsgBox prompt:="ËÜèïò username/password. ÎáíáðñïóðáèÞóå.", buttons:=vbCritical, Title:="Login Error"

Me.cbo_user.SetFocus
Else
MsgBox prompt:="Ãåéá óïõ, " & rst.Fields(0).Value & ". ÊáëÞ ÂÜñäéá", buttons:=vbOKOnly, Title:="Åðéôõ÷Þò Åßóïäïò óôçí ÅöáìïãÞ"
DoCmd.OpenForm "main_frm", acNormal
End If

Set db = Nothing
Set rst = Nothing


intLogonAttempts = intLogonAttempts + 1
If intLogonAttempts > 3 Then
MsgBox "Are you a valid user?" & vbCrLf & "Contact Administrator.", vbCritical, "Failure"

End If



globals.Logging "login"
DoCmd.Close acForm, "frm_login", acSaveYes




End Sub

Private Sub cmd_Cancel_Click()
globals.Logging "ÅÎÏÄÏÓ"
DoCmd.Quit acQuitSaveAll

End Sub

vraxnakisg 27-07-20 19:40

2 Συνημμένο(α)
Καλησπέρα Έξαρχε,

Δες μια πρόταση για το κρύψιμο του NAVIGATION PANE και φόρμα Frm_Login δεν πρέπει να είναι αποκλειστική.

Πρόσεξε την δομή που έχουν ο πίνακας Users και ο πίνακας UserGroup.

Το type missmatch στο βγάζει γιατί δεν παίρνει τον σωστό τύπο του ορίσματος που περιμένει κάποια συνάρτηση.

Πρόσεξε στο σύνθετο πλαίσιο «cboUser» την προέλευση γραμμής και την σειρά των πεδίων σε αυτή - img1.jpg

Ευχαριστώ.

jamman 27-07-20 20:40

Καλησπέρα Γιώργο.

Σ'ευχαριστώ πάρα πολύ για τη βοήθεια . Ήταν ακριβώς αυτό που ήθελα. Έχω μία ερώτηση ακόμα. Θα ήθελα , μόλις ανοίξει η frm_Home , σε ένα πλαίσιο κειμένου να εμφανίζει το username που έκανε login και σε ένα άλλο πλαίσιο το ονοματεπώνυμο αυτού. Το προσπάθησα με TempVars αλλά δεν είδα αποτέλεσμα. Πως ανεβάζεις την εφαρμογή , αφού είναι μεγαλύτερη από 512kb;;;; :oeo::oeo:

Με εκτίμηση ,

Βασίλης

exarhos 27-07-20 22:11

form_login
 
Παράθεση:

Αρχική Δημοσίευση από vraxnakisg (Μήνυμα 31316)
Καλησπέρα Έξαρχε,

Δες μια πρόταση για το κρύψιμο του NAVIGATION PANE και φόρμα Frm_Login δεν πρέπει να είναι αποκλειστική.

Πρόσεξε την δομή που έχουν ο πίνακας Users και ο πίνακας UserGroup.

Το type missmatch στο βγάζει γιατί δεν παίρνει τον σωστό τύπο του ορίσματος που περιμένει κάποια συνάρτηση.

Πρόσεξε στο σύνθετο πλαίσιο «cboUser» την προέλευση γραμμής και την σειρά των πεδίων σε αυτή - img1.jpg

Ευχαριστώ.

Φίλε Γιώργο σε ευχαριστώ πάρα πολύ για την, κατά καιρούς, πολύτιμη βοήθεια σου. Να είσαι καλά.

vraxnakisg 28-07-20 12:40

1 Συνημμένο(α)
Καλησπέρα Βασίλη,

Δες μια πρόταση για το ζητούμενο σου.

Έχει αυξηθεί το μέγεθος των αρχείων που μπορούμε να ανεβάσουμε σε 1mb.

Ευχαριστώ.

jamman 30-07-20 08:47

1 Συνημμένο(α)
Καλημέρα Γιώργο ,

είσαι θεός , απλά ... Ευχαριστώ.

Μια ερώτηση που το διαπίστωσα χθες. Μπαίνω ως admin στην εφαρμογή με "full" δικαιώματα-properties. Βγαίνω και αμέσως μόλις ξαναμπαίνω ως user , αν και έχω απενεργοποιήσει ribbon - shorcutmenu - παράθυρο περιήγησης κτλ , αρχικά δίνει τη δυνατότητα προβολής σχεδίασης .
Βγαίνω και ξαναμπαίνω ως admin. Πάλι η εφαρμογή "κρατάει" κάποιες ρυθμίσεις από τον user , δηλαδή δεν μου δίνει τη δυνατότητα προβολής σχεδίασης και ribbon.
Δηλαδή σε κάθε περίπτωση θα πρέπει να μπαίνω δύο φορές για να ισχύσουν οι περιορισμοί ή τα δικαιώματα.

Γιατί το κάνει αυτό; Την εφαρμογή δεν την έχω μετατρέψει ακόμα σε ACCDE.

Ανεβάζω και την εφαρμογή έτσι ώστε αν μπορεί κάποιος να βοηθήσει. Οι χρήστες είναι (ΠΑΠΑΔΟΠΟΥΛΟΣ = Admin = 123) και (ΝΙΚΟΛΑΟΥ=User=345)

Με εκτίμηση,
Βασίλης

jamman 15-09-20 20:14

1 Συνημμένο(α)
Καλησπέρα σε όλους. Είχα ανεβάσει λάθος εφαρμογή και σήμερα το κατάλαβα. Αν μπορεί κάποιος να βοηθήει θα ήμουν ευγνώμων.

dimitrisp 16-09-20 00:13

Γεια σας

Φίλε Βασίλη, αντιμετωπίζω κι εγώ το ίδιο πρόβλημα στη βάση μου (.accdb).

Προσπαθώντας να το επιλύσω διαπίστωσα ότι, για να ισχύσουν οι αλλαγές στο Shortcut menus τής Access
πρέπει να γίνει υποχρεωτικά επανεκκίνηση τής εφαρμογής.
Η μόνη λύση που εφάρμοσα είναι να γίνεται αυτόματη επανεκκίνηση τής εφαρμογής (με
σχετική ενημέρωση του χρήστη), για να ισχύσει το παραπάνω.

Όμως, ο τρόπος αυτός, φαίνεται να αποτελεί μια "μπακαλίστικη" και δυσλειτουργική διαδικασία!

Ίσως τα εμπειρότερα μέλη του Forum να έχουν κάποια ορθότερη και κομψότερη λύση
εφόσον, βεβαίως, υπάρχει.

Καλή συνέχεια...

jamman 16-09-20 18:12

Καλησπέρα Δημήτρη και ευχαριστώ για την απάντηση. Το έχω δοκιμάσει και αυτό , αλλά δυστυχώς για να ισχύσουν οι αλλαγές στα fullmenu , specialkeys κτλ , θα πρέπει να γίνεται διπλή επανεκκίνηση της εφαρμογής κάθε φορά. Δεν ξέρω γιατί.

Με εκτίμηση,
Βασίλης


Η ώρα είναι 09:30.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2