Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

FE & BE: User, der sich anmeldet erkennen, eintragen und bei Abmeldung austragen

Begonnen von Ben, Februar 11, 2013, 17:22:56

⏪ vorheriges - nächstes ⏩

Ben

Hallo zusammen.

Ich hab über's WE noch ein wenig getüfftelt, komm aber auf kein Ergebnis.
Gibts da vielleicht noch den ein oder anderen Tipp von euch, wie ich den Parameter an die Abfrage übergeben kann?
Bin für jeden Hinweis echt dankbar!!

Wünsch euch einen schönen Wochenanfang!
Gruß, Benjamin

69bruno

Ja, wenn es dazu eine Lösung gibt, dann bin ich auch ganz Ohr..... aber ich habe schon vor sechs Monaten versucht, einen Parameterwert an eine Abfrage zu übergeben und nirgends eine funktionierende Anleitung dazu gefunden........... :-\

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Ben

Hallo 69bruno,

im Eröffnungs-Tread habe ich eine Datenbank angehängt. In dieser Datenbank gibt es das Formular frm_Benutzergruppen_zu_Benutzer. Im Form_Load-Ereignis dieses Formulars wird ein Parameter an eine Abfrage übergeben und das Ergebnis der Abfrage in ein Listfeld eingetragen. Da funktioniert es ohne Probleme.
Ich wollte es abkupfern, (Copy-Paste - ich weiß, beim Programmieren absolut ungern gesehen  ;D ) und die entsprechenden Teile abändern, aber er fragt im Fomular frm_eigene_Benutzerdaten immer den Parameter ab, statt ihn aus der Abfrage zu laden.

Vielleicht entdeckst du ja im Code des ersten Fomulars (frm_Benutzergruppen_zu_Benutzer) einen Hinweis??  ???

Danke für eure Hilfe!
Gruß, Ben

69bruno

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Ben

Sind gezippte Dateien. Jeweils dann nach dem entpacken als *.accdb vorhanden.

Gruß, Benjamin

69bruno

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Ben

Das ist seltsam. Bei mir klappt es. Access 2010...

Naja, hier der Code bei dem anderen Formular:

Private Sub Form_Load()
'Läd beim öffnen des Formulars frm_Benutzergruppen_zu_Benutzer den ersten Eintrag der Tabelle tbl_Benutzer in das Feld cboBenutzer
'und läd dessen Zuordnungen zu Benutzergruppen.

    Me!cboBenutzer = Me!cboBenutzer.ItemData(0)
    Call lstAusgewaehltFuellen
    Call lstNichtAusgewaehltFuellen

End Sub



Private Sub lstAusgewaehltFuellen()
'Füllt das Listfeld Mitglied von in Abhängigkeit vom gewählten Benutzer

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim prm As DAO.Parameter
    Dim rst As DAO.Recordset
    Dim lngBenutzer_ID As Long
   
    Set db = CurrentDb
    Set qdf = db.QueryDefs("qry_frm_Benutzergruppen_zu_Benutzer_Lst_Ausgewaehlt")
   
    lngBenutzer_ID = Nz(Me!cboBenutzer, 0)
    Set prm = qdf.Parameters("prmBenutzerID")
    prm.Value = lngBenutzer_ID
   
    Set rst = qdf.OpenRecordset
    If Not rst.EOF Then
        rst.MoveLast
    End If
   
    Set Me!lstAusgewaehlt.Recordset = rst

End Sub



Private Sub lstNichtAusgewaehltFuellen()
'Füllt das Listfeld Weitere Gruppen in Abhängigkeit vom gewählten Benutzer

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim prm As DAO.Parameter
    Dim rst As DAO.Recordset
    Dim lngBenutzer_ID As Long
   
    Set db = CurrentDb
    Set qdf = db.QueryDefs("qry_frm_Benutzergruppen_zu_Benutzer_Lst_Nicht_Ausgewaehlt")
   
    lngBenutzer_ID = Nz(Me!cboBenutzer, 0)
   
    Set prm = qdf.Parameters("prmBenutzerID")
    prm.Value = lngBenutzer_ID
   
    Set rst = qdf.OpenRecordset
    If Not rst.EOF Then
        rst.MoveLast
    End If

    Set Me!lstNichtAusgewaehlt.Recordset = rst

End Sub


Anbei Screenshots der Abfrageentwürfe.

Gruß, Benjamin

[Anhang gelöscht durch Administrator]

Stapi

Hallo Ben

Ich habe dir ein Beispiel Vorgeschlagen, aus der Funktion (Public Function atCNames() As String
) wird dir die Variabel atCNames als String zurück geliefert. Diese kannst du in deine Abfrage als Kriterium entsprechend verwenden. Wenn deine Anforderung unter einer Windows Anwendung so nicht stattfinden soll so hat auch hier dir @Wurliwum eine Lösung geliefert.
Grüße aus dem schönen NRW
Stefan

Ben

Hallo Stapi.

Danke für die Hinweise.
Ich versuche auch, den Lösungsweg von Wurliwurm unzusetzen.
Und das klappt auch Prima. Wird ein Formular geöffnet, prüft es die Berechtigung und öffnet es nur, wenn derjenige es öffnen darf. Klappt! Danke erstmal dafür.
Ich bekomme es nur nicht als Parameter an eine Abfrage übergeben. Daher die Frage, warum mein VBA-Code den Parameter nicht übergibt, sondern die Abfrage den Parameter nochmal in einer Inputbox abfragt.

Gruß, Ben

69bruno

Habe grade keine Möglichkeit zu testen, aber versuch doch mal:

qdf.Parameters![prmBenutzerID] = lng_BenutzerID
anstatt

Set prm = qdf.Parameters("prmBenutzerID")   
prm.Value = lngBenutzer_ID
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Ben

Hallo 69bruno!

Umgesetzt, aber es kommt die selbe Abfrage. :-[ Anbei der Screenshot.
Habe es halt natürlich umgeschrieben für den Parameter, den ich in der entsprechenden Abfrage drinnen hab.
Aber danke trotzdem für deine Mühe! Ich hoffe, wir bekommen das noch gelöst!

Gruß, Ben

[Anhang gelöscht durch Administrator]

Stapi

Hallo Ben

Das du die Eingabeaufforderung bekommst ist darin begründet das du ein Kriterium in deiner Abfrage verwendest das der Unbekannt ist.
Wichtig ist, das du in einem MODUL den Usernamen ermittelst und nicht in einer Formular Prozedur.
Zum Verständnis machst du es in einer Formular Prozedur oder Sub ist der Wert (Usernamen) nur solange in einer Variabel vorhanden bis die Prozedur / Sub abgeschlossen ist.
Das Modul liefert dir wie von mir beschrieben aus der Funktion ständig den Wert, steht somit der Abfrage immer als Kriterium zu Verfügung.
Leider habe ich nur Access 2003 und kann deine Datenbank nicht öffnen.
Grüße aus dem schönen NRW
Stefan

Ben

Hi Stapi,

Der Code sieht aktuell so aus:
Option Compare Database
Option Explicit

Private Sub Form_Load()
'Lädt die eigenen Benutzerdaten

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim prm As DAO.Parameter
    Dim lngAngemeldeterUser As Long
   
    lngAngemeldeterUser = CLng(OptionLesen("CurrentUserID"))
   
    Set db = CurrentDb
    Set qdf = db.QueryDefs("qry_eigene_Benutzerdaten")
    Set prm = qdf.Parameters("prmAngemeldeterUser")
    prm.Value = lngAngemeldeterUser
   
End Sub


Die Funktion OptionLesen befindet sich in einem eigenen Modul. Im selben Modul gibt es die entsprechenden Funktionen, in welchen der User bei der Anmeldung als Variable gespeichert wurde und die, mit der der aktuell angemeldete User aus der Variable ausgelesen wird. Auf letzte greift die Funktion OptionLesen zurück.

Der Username wird also global gespeichert und steht zur Verfügung.

Gruß, Ben

Stapi

Hallo Ben

Ist es dir möglich die Datenbank in das Access Format 2003 zu konvertieren und mit ein paar Spiedaten zu versehen, ich glaube es ist der bessere Weg als hier ständig Code zu posten. Zumal mit Access 2003 hier der Kreis größer wird um dein Problem zu lösen.
Grüße aus dem schönen NRW
Stefan

Ben

Hallo Stapi.

Danke für deine Geduld!  ;D
Hier die scharf abgespeckte Version der Datenbank als *.mdb un nur mit der fehlerhaften Parameterübergabe.
Hinweis zum Anmelden:
Alle User haben das Kennwort welcome.
Gespeichert werden soll der im Loginformular angegebene Username in der Variablen.
Auf diesen soll beim Aufruf des Formulars frm_eigene_Benutzerdaten zurückgegriffen werden.

Gruß, Ben

[Anhang gelöscht durch Administrator]