Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Funktionierende Login Maske bis auf Prüfung ob Feld leer ist, das geht nicht ...

Begonnen von derilzemer, Januar 17, 2018, 21:21:07

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
ich habe ein Loginformular. Das passt soweit, sprich es prüft ob Passwort übereinstimmt für den User, ob der User selbst existiert, alles gut soweit. Beiläufig viel mir dann auf, dass wenn ich einen User eintrage und ich return drücke der Login ohne Passwort geht  :-[. Den Code dafür habe ich mal vor längerer Zeit über ein YT-Video gefunden und integriert. Wie macht man das bzw. wie muss man den Code ergänzen, damit er ein leeres Passwortfeld NICHT akzeptiert?? Hier der aktuelle Code.
Private Sub cmdLogin_Click()
    Dim rs As Recordset
   
    Set rs = CurrentDb.OpenRecordset("tblBenutzer", dbOpenSnapshot, dbReadOnly)
   
    rs.FindFirst "UserID='" & Me.txtBenutzername & "'"
   
    If rs.NoMatch = True Then
        Me.lblFalscherBenutzer.Visible = True
        Me.txtBenutzername.SetFocus
        Exit Sub
    End If
    Me.lblFalscherBenutzer.Visible = False
   
    If rs!Passwort <> Me.txtPasswort Then
        Me.lblFalschesPasswort.Visible = True
        Me.txtPasswort.SetFocus
        Exit Sub
    End If
    Me.lblFalschesPasswort.Visible = False
   
    DoCmd.OpenForm "frmMenueseite"
    DoCmd.Close acForm, "frmLogin"

End Sub


Für Hilfe diesbezüglich wäre ich dankbar.
Grüße und Dank im voraus
Andreas

bahasu

Hi,

vielleicht hilft:
If rs!Passwort <> nz(Me.txtPasswort, "") or nz(Me.txtPasswort, "") = "" Then   'abbrechen

Ist sichergestellt, dass die Sub "cmdLogin_Click" überhaupt aufgerufen wird?

Harald
Servus

Xoar

Moin, jetzt mal auf die schnelle..

If rs!Passwort <> Me.txtPasswort or IsNull(me.TxtPasswort) Then

Könnte man auch über eine Gültigkeitsregel des Feldes realisieren.

Hoffe kannst was mit anfangen.

Grüße

Lachtaube

... und wenn man statt auf Ungleichheit auf Gleichheit prüft, was ja eigentlich der Logik der Anforderung entspricht, entfällt auch die Besonderheit bei Null-Werten. :)
Grüße von der (⌒▽⌒)

bahasu

Hi,

ich vermute mal, dass ein weiteres Problem entstehen kann, wenn grosse und kleine Buchstaben im Kennwort zu unterscheiden sind.

Hier könnte StrComp helfen.

Harald
Servus

markusxy

Ich würde das Click Event erst ermöglichen, wenn Benutzername und Passwort ausgefüllt sind.
Im After Update Event von beiden würde ich folgende Methode ausführen.

sub LoginEnable()
    cmdLogin.Enabled = Len(Nz(Me.txtBenutzername)) > 0 And Len(Nz(Me.txtPasswort)) > 0
end sub


Dann ist sichergestellt, dass der restliche Code einwandfrei funktioniert.

Joss

Hallo Andreas,

If rs!Passwort <> Nz(Me.txtPasswort) Then

oder der Vorschlag von Lachtaube.

Gruß
Josef

derilzemer

Hallo zusammen,
vielen Dank für die Info und Hilfe. Ich habe mich für die Lösung vom Markus entschieden, auf beide Textfelder das After_Update Ereignis zu nutzen. Das funktioniert auch tadellos. Ich frage mich nur, ob dies sinnvollerweise auf den Loginbutton gelegt werden kann/sollte, dass beim klicken geprüft wird, ob die beiden Textfelder befüllt sind (zwecks Übersicht). Da ich aber VBA mäßig total abhängig bin was die Hilfe angeht, bin ich mit der Lösung aber vollauf zufrieden und würde den Teufel tun mich zu beschweren :).
Vielen Dank noachmal

Gruß Andreas
Grüße und Dank im voraus
Andreas

Lachtaube

Jeder, der an Dein Backend kommt, kann z. Bsp. mit Excel alle Benutzernamen und Passworte im Klartext (auch ohne VBA-Kenntnis) auslesen. Da fragt man sich natürlich nach der Sinnhaftigkeit solcher Konstrukte schlechthin.
Grüße von der (⌒▽⌒)

Beaker s.a.

Hallo Andreas,

Private Sub cmdLogin_Click()
    Dim rs As Recordset
   
    Set rs = CurrentDb.OpenRecordset("tblBenutzer", dbOpenSnapshot, dbReadOnly)

    If Nz(Me.txtBenutzername, "") = "" OR Nz(Me.Passwort, "") = "" Then
        Msgbox "Beide Felder müssen ausgefüllt sein!"
    Else
        rs.FindFirst "UserID='" & Me.txtBenutzername & "'"
        'dein weiterer Code
    End if

End Sub


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
und auch noch mal den Hinweis, dass ein einfacher Textvergleich nicht zwischen Groß und Kleinbuchstaben unterscheidet.

Passwort = PASSWORT = passwort = PassWort

Ist das gewollt ?
Gruß Klaus

bahasu

Hi,

Zitat von: MzKlMu am Januar 18, 2018, 16:44:57
noch mal den Hinweis, dass ein einfacher Textvergleich nicht zwischen Groß und Kleinbuchstaben unterscheidet.
Passwort = PASSWORT = passwort = PassWort

Lösungsvorschlag gibt es in #4

Harald
Servus

derilzemer

Hallo,
sorry erst mal, dass ich vorhin
Zitat....ich frage mich nur, ob dies sinnvollerweise auf den Loginbutton gelegt werden kann/sollte, dass beim klicken geprüft wird.....
erwähnt habe. Das war unüberlegt, da natürlich alle anderen Antworten mehr oder weniger genau das ja vorgeschlagen haben. Markus hatte ja nur eine andere Vorgehensweise vorgeschlagen. Also sorry for that, war mal wie so oft unüberlegt geantwortet :(.
@Klaus
Zitatund auch noch mal den Hinweis, dass ein einfacher Textvergleich nicht zwischen Groß und Kleinbuchstaben unterscheidet.
Passwort = PASSWORT = passwort = PassWort
Ist das gewollt ?
Nein Klaus, das ist natürlich nicht gewollt, das war eben nicht in dem "gefundenen" Code inkludiert.
@bahasu
ZitatLösungsvorschlag gibt es in #4
Wie du selbst gelesen hast, habe ich den Code "gefunden", angepasst soweit ich konnte und wusste und dann verwendet. strcomp "einbauen" wird wohl eher schwierig bis unmöglich für mich, muss ich zugeben  :(.
@Ekkehard
danke für den "genauen" Integrationshinweis bezüglich Prüfung über den Loginbutton.
@Lachtaube
ZitatJeder, der an Dein Backend kommt, kann z. Bsp. mit Excel alle Benutzernamen und Passworte im Klartext (auch ohne VBA-Kenntnis) auslesen. Da fragt man sich natürlich nach der Sinnhaftigkeit solcher Konstrukte schlechthin.
Danke für deinen Hinweis, auch wenn ich jetzt nicht weiß wie ich das wiederum "vermeiden" könnte :(.

Gruß Andreas

Grüße und Dank im voraus
Andreas

bahasu

Hi,

Zitat von: derilzemer am Januar 18, 2018, 18:38:56
strcomp "einbauen" wird wohl eher schwierig bis unmöglich für mich, muss ich zugeben  :(.

da bin ich aber optimistischer: Das schaffst Du!  :)
Aus der access-Hilfe folgt zum Aufruf: StrComp(string1, string2[, compare])

Für "compare" setzt Du ein: "vbBinaryCompare" ' 0 Führt einen binären Vergleich durch.

Als Ergebnis dieser Funktion erhältst Du:
0 ' => string1 entspricht string2
Daneben gibt es noch -1 und +1 und Null als mögliches Ergebnis: Versuch macht kluch.  ;)

Harald

Servus

bahasu

Hi,

Zitat von: derilzemer am Januar 18, 2018, 18:38:56
Danke für deinen Hinweis, auch wenn ich jetzt nicht weiß wie ich das wiederum "vermeiden" könnte :(.

Da ich die Vorzüge eher in access2003 als in a2016 sehe, kann ich mir nicht verkneifen, dass winzigweich in dem alten Programm das Berechtigungskonzept hat, das genau regelt, wer was darf. Ob das ein für Dich nutzbarer Weg ist, kannst nur Du entscheiden.

Harald


PS
Bitte vermeide zukünftig einen zu langen Titel.
Zumindest bei mir erscheint beim Speichern eines Beitrags immer eine Fehlermeldung, dass der Titel zu lang ist.
Servus