Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: jule10 am Februar 28, 2016, 20:09:49

Titel: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: jule10 am Februar 28, 2016, 20:09:49
Erst mal herzlichen Dank,
vielleicht kann mir ja jemand helfen, bin schon total verzweifelt.
Folgendes Problem: Ich habe ein Login Formular dass den Windowsnutzer ermittelt und diesen im Textfeld nutzerName ausgibt. Dann wird ermittelt, ob das Passwort richtig eingegeben wird (Passwort und Nutzer stehen in einer Tabelle Nutzer soweit funktioniert alles. 
Beim ersten Datensatz wird auch alles in eine weitere Tabelle Benutzer eingetragen, doch beim erneuten Aufruf des Loginformulars wird nichts mehr eingetragen, die Daten werden nur akutalisiert (Datum und Uhrzeit).
Ich würde gerne nach jedem Login einen neuen Datensatz in der Tabelle Benutzer haben.

Option Compare Database
Dim bCanSafelyClose As Boolean

Private Sub buttonLogin_Click()
Dim rst As Recordset

Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblNutzer WHERE nutzerName = '" & nutzerName & "' AND nutzerpasswd = '" & nutzerpasswd & "';")
If rst.RecordCount = 1 Then
    bCanSafelyClose = True
   
DoCmd.Close
DoCmd.OpenForm "frmHaupt"

Else
    MsgBox "Ungültiges Passwort"
    bCanSafelyClose = False
End If
End Sub

Private Sub Form_Load()
bCanSafelyClose = False
benutzer = fosUserName
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Cancel = Not bCanSafelyClose
End Sub


für das aktuelle Datum und die Zeit habe ich ein Mako erstellt
Vielen Dank im voraus und noch eiinen schönen abend Jule
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: MzKlMu am Februar 28, 2016, 21:14:07
Hallo,
ich kann nicht erkennen, wo da überhaupt ein Datensatz geschrieben wird.

Was macht das Makro ?


PS
Bitte benutze die Codetags des Forums und nicht diesen Farbkasten.  ;D
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: jule10 am Februar 28, 2016, 21:47:01
Erst mal ganz lieben Dank für die Antwort!
Das mit dem Blau tut mir leid, wollte den Text hervorheben und hab aus versehen nicht auf Vorschau geklickt.
Da das Formular automatisch außer dem Passwort ausgefüllt wird, ich habe noch ein Makro AusführenCode Funktionnsname User()
und Datum, Uhrzeit werden über ein Makro mit SetzenWert in das Formular eingefügt.
Wenn die Tabelle leer ist, wird der erste Datensatz in die Tabelle Benutzer geschrieben (übernommen). Nach weiten Aufrufen wird nur noch das Datum, Zeit in der selben Zeile der Tabelle aktualisiert.
Ich hatte versucht über INSERT INTO ...einen weiteren Datensatz einzufügen, klappte nicht bzw. bekam Laufzeitfehler etc., habs dann wieder gelöscht und im Moment bin ich total verwirrt.

Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: MzKlMu am Februar 28, 2016, 23:17:55
Hallo,
verzichte auf Makros, verwende VBA.
Du musst per Anfügeabfrage immer einen neuen Datensatz schreiben.
Wo und wie werden überhaupt die Makros aufgerufen ?

Du erklärst immer nur teilweise was Du machst, was die Makros genau machen weiß man auch nicht.
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: jule10 am Februar 29, 2016, 01:17:27
Vielen lieben Dank, hab jetzt mal eine Anfügeabfrage erstellt, leider klappt es immer noch nicht, oder ich weiß einfach nicht mehr was ich machen muss.
Mein Formular hat folgende Felder: nutzerName und nutzerPasswort
einen Loginbutton und einen Abbrechen Button
Ein Makro führt den Code (siehe mein erster post) beim laden des Formulars (Ereinis bei Laden) aus,
das andere Makro schreibt das aktuelle Datum und die Zeit in die Felder benutzerDatum, BenutzerZeit der tblBenutzer, Ereignis vor Aktualisierung.
Wenn ich auf den button Login klicke, sollte sich in der tblBenutzer ein weiterer Datensatz befinden, leider tut es das nicht, nur wenn sich kein Datensatz in der Tabelle befindet, wird etwas eingetragen. Allerings werden die Felder genDatum und genZeit mit den neuen Werten aktualisiert.
Möchte mich nochmal sehr herzlich bei dir bedanken, freu mich schon dass sich übeerhaupt jemand meines Problems angenommen hat.
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: jule10 am Februar 29, 2016, 01:37:59
Habe gerade in die tblBenutzer andere nutzerNamen als der des Windowsnutzers eingegeben, solange der Windowsnutzer noch nicht in der tblBenutzer steht, funkiert das hinzufügen des Datensatzes.
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: MaggieMay am Februar 29, 2016, 10:27:54
Hallo,

mein Tipp wäre, die Makros in VBA-Code umzuwandeln und diesen zu zeigen, dann kann man dir konkrete Hilfestellung geben.

Ist das Login-Formular an eine Tabelle gebunden oder wie wird der erste Benutzerdatensatz in die Tabelle geschrieben?

Wenn du eine Login-Historie pflegen willst, so brauchst du dafür zwei Tabellen, einmal die Benutzertabelle mit Nutzername und Passwort und zum anderen eine Login-Tabelle.
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: jule10 am Februar 29, 2016, 12:48:32
Erst mal vielen lieben Dank, für die endlose Geduld!  :)

'------------------------------------------------------------
' userAuslesen
'
'------------------------------------------------------------

Option Compare Database
Option Explicit
 
Private Declare Function apiGetUserName Lib "advapi32.dll" _
                         Alias "GetUserNameA" (ByVal lpBuffer As String, _
                                               nSize As Long) As Long
 
Function fosUserName() As String
     Dim lngLen As Long, lngX As Long
     Dim strUserName As String
   
     strUserName = String$(254, 0)
     lngLen = 255
     lngX = apiGetUserName(strUserName, lngLen)
     If lngX <> 0 Then
        fosUserName = Left$(strUserName, lngLen - 1)
       Else
        fosUserName = ""
     End If
End Function

Function User()
    MsgBox "Zur Zeit angemeldet ist: " & fosUserName

End Function

Option Compare Database

'------------------------------------------------------------
' Auslesen ausführen
'
'------------------------------------------------------------
Function userAuslesen()
On Error GoTo userAuslesen_Err

    User


userAuslesen_Exit:
    Exit Function

userAuslesen_Err:
    MsgBox Error$
    Resume userAuslesen_Exit

End Function

'------------------------------------------------------------
' Ereignisprzedur beim Laden
'
'------------------------------------------------------------
Option Compare Database
Dim bCanSafelyClose As Boolean

Private Sub buttonLogin_Click()
Dim rst As Recordset

Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblNutzer WHERE nutzerName = '" & nutzerName & "' AND nutzerpasswd = '" & nutzerpasswd & "';")
If rst.RecordCount = 1 Then
    bCanSafelyClose = True
DoCmd.Close
DoCmd.OpenForm "frmHaupt"

Else
    MsgBox "Ungültiges Passwort"
    bCanSafelyClose = False
End If
End Sub

Private Sub Form_Load()
bCanSafelyClose = False
benutzer = fosUserName
[benDatum] = Date
[benZeit] = Time
End Sub

Private Sub Form_Unload(Cancel As Integer)
Cancel = Not bCanSafelyClose
End Sub


Beim öffnen des Loginformulars ist der ermittelte Windowsuser bereits in das LoginFormular eingetragen.
nach Eingabe des Passwortes wird in der TblNutzer nachgesehen ob ein gültiges passwort für den Nutzer existiert.
Der User wird in der Tabelle tblBenutzer im Feld benutzer eingetragen, zusätzlich werden in die TblBenutzer das aktuelle Datum und die Zeit eingetragen

Beim ersten Eintrag also wenn die tblBenutzer keinen Datensatz mit dem ermittelten Windowsuser hat, klappt alles, doch sobald
der ermittelte Windowsuser sich erneut einloggt, wird kein neuer Datensatz in die tblBenutzer geschrieben, sondern nur das
Datum, Zeit aktualisiert bzw. überschrieben.
Ich würde aber gerne die alten Datensätze behalten.

Ich habe zwei Tabellen, in der Tabele tblNutzer wird nachgesehen ob für den User ein passwort vorhanden ist.
Titel: Re: Nach Login, Benutzer ermitteln Daten in dafür vorgesehene Tabelle eintragen.
Beitrag von: MaggieMay am Februar 29, 2016, 14:15:45
Du erzählst jetzt nichts wirklich Neues, auch der Code ist eher verwirrend, weil offensichtlich aus mehreren Modulen zusammenkopiert, was aber nicht kenntlich gemacht worden ist. Und wenn du sagst, du hättest zwei Tabellen, warum nennst du nicht auch beide Namen, damit man gezielt und unmissverständlich darüber reden kann.

Ich könnte mich da jetzt auch nur wiederholen, indem ich aufzähle welche Tabelle zu welchem Zweck eingesetzt werden sollte. Ich denke, das Login-Formular sollte ungebunden sein, du turnst da nämlich immer nur auf einem, dem ersten, Datensatz herum. Das Login-Protokoll kann dann nach erfolgreicher Anmeldung mit einer Anfügeabfrage gefüllt werden. Oder du öffnest das Formular im Anfügemodus, dann wird stets ein neuer Datensatz angelegt. Die zugrunde liegende Tabelle sollte dann die Login-Tabelle sein, in der jede einzelne Anmeldung protokolliert wird. Dann muss aber verhindert werden, dass bei fehlerhafter Anmeldung unvollständige Datensätze hängen bleiben, ist also ein bißchen mehr Aufwand.