ACCESS 2002 - Übergabe von Parametern an Formulare über VBA
small-step
- datenbank
Hallo alle,
die Frage hat mit HTML nicht wirklich viel zu tun, ich weiß aber was für gute und kompetente Hilfe hier auch zu anderen Themen geboten wird, also stelle ich sie einfach mal.
Folgendes Problem plagt mich: Ich möchte aus einem Listenfeld in einem Formular (Access 2002) einen Eintrag auswählen und mit einem Klick auf "Details" ein Popup-Formular öffnen. Jetzt will ich diesem Formular aber die ID des ausgewählten Eintrags übergeben, damit ich auch die Chance habe irgendwelche Details anzuzeigen. Daran scheitere ich allerdings. Erstens weiß ich nicht, wie ich gezielt an die ID komme (im Listenfeld werden Name und Vorname einer Person angezeigt) und zweitens weiß ich nicht, wie ich diese Info im geöffneten Popup-Formular schon beim Öffnen des Formulars abrufen kann. Ich habe dazu nur "_Click" gefunden, damit kann ich mir die übergebenen Testparameter per Mausklick auf ein Element ausgeben lassen.
Hier einmal die VBA Teile die ich mir erarbeiten konnte:
Das Formular mit dem Listenfeld
Private Sub btMitarbeiterDetails_Click()
On Error GoTo Local_Error
Dim strFormName As String
Dim strOpenArgs As String
strFormName = "frmMitarbeiterDetails"
strOpenArgs = "Testparameter"
Dim strTest As String
DoCmd.OpenForm strFormName, , , , , , strOpenArgs
Local_Error:
End Sub
Und hier das Popup-Formular
Private Sub txtVorname_Click()
MsgBox OpenArgs
End Sub
Ist nicht sehr viel, ich weiß. Leider hab ich hier keine Literatur zur Verfügung und die Access Hilfe... na ja. Open Source ist mir eigentlich lieber, allein schon weil auch mit Informationen meist großzügiger umgegangen wird, aber es ist eine Übungsaufgabe von meinem Chef...
Ich danke euch schonmal im Voraus für jede Antwort. Selbst wenn sie eher zur Erheiterung als zur Problemlösung dient. Das kann ich jetzt mindestens genau so gut vertragen :-)
Gruß,
small-step
Nochmal hallo alle,
eins fällt mir noch ein. Ich habe noch ein zweites Popup-Formular, mit dem ich neue Mitarbeiter eintragen kann. Das ganze funktioniert eigentlich recht gut, nur eins stört mich. Ich würde das Listenfeld nach dem Eintragen eines neuen Mitarbeiters gern aktualisieren. Am besten automatisch direkt aus dem Popup mit dem ich den Mitarbeiter eintrage. Versucht habe ich das ganze mit OnClose und Requery, allerdings hat es erstens nicht funktioniert (das Parent-Formular wurde nicht aktualisiert) und zweitens wurde das Popup-Formular nach dem erfolgreichen Anlegen des neuen Eintrags nicht mehr geschlossen.
Hier der VBA-Code für das "Anlegen" Popup:
Private Sub btMitarbeiterSpeichern_Click()
On Error GoTo Local_Exit
Dim strName As String
Dim strVorname As String
Dim strEMail As String
If IsNull(Nachname) Then GoTo Input_Error
If IsNull(Vorname) Then GoTo Input_Error
If IsNull(EMail) Then GoTo Input_Error
strNachname = Nachname
strVorname = Vorname
strEMail = EMail
Dim strSql As String
strSql = "INSERT INTO tbMitarbeiter(Nachname,Vorname,EMail) VALUES('" & strNachname & "','" & strVorname & "','" & strEMail & "')"
CurrentProject.Connection.Execute strSql
DoCmd.Close
GoTo Local_Exit
Input_Error:
MsgBox ("Bitte überprüfen Sie Ihre Eingabe. Alle Felder müssen ausgefüllt werden!")
Local_Exit:
End Sub
Auch hierzu schon einmal Dankeschön!
Gruß,
small-step
Hallo ich selbst,
Das Formular mit dem Listenfeld
Private Sub btMitarbeiterDetails_Click()
On Error GoTo Local_Error
Dim strFormName As String
Dim strOpenArgs As StringstrFormName = "frmMitarbeiterDetails"
strOpenArgs = "Testparameter"Dim strTest As String
DoCmd.OpenForm strFormName, , , , , , strOpenArgs
Local_Error:
End Sub
Das wurde jetzt zu:
Private Sub btMitarbeiterDetails_Click()
On Error GoTo Local_Error
Dim strFormName As String
Dim strOpenArgs As String
strFormName = "frmMitarbeiterDetails"
strOpenArgs = Me!lstMitarbeiter.Column(2)
DoCmd.OpenForm strFormName, , , , , , strOpenArgs
Local_Error:
End Sub
Und funktioniert jetzt. Ich habe in die Abfrage die Id mit reingenommen und sie im Listenfeld nicht anzeigen lassen, jetzt kann ich sie abrufen.
Und dieser Teil hier:
Private Sub txtVorname_Click()
MsgBox OpenArgs
End Sub
Wurde dazu:
Private Sub Form_Open(Cancel As Integer)
Dim strOpenArgs As String
Dim strVorname As String
Dim strNachname As String
Dim strEMail As String
Dim strSql As String
strOpenArgs = OpenArgs
Dim rs As New Recordset
rs.Open "SELECT Vorname,Nachname,EMail FROM tbMitarbeiter WHERE PKMitarbeiter = " & strOpenArgs & "", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
strVorname = rs("Vorname")
strNachname = rs("Nachname")
strEMail = rs("EMail")
Me!txtVorname.Value = strVorname
Me!txtNachname.Value = strNachname
Me!txtEmail.Value = strEMail
End Sub
Womit auch dieser Teil funktioniert. Jetzt muss ich mir nur noch etwas einfallen lassen, wie ich die das Listenfeld im Popup per VBA füttere, ich muss nämlich auch hier einen Parameter übergeben. Schauen wir mal ob ich das hinbekomme.
Gruß,
small-step