collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 134
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14260
  • stats Beiträge insgesamt: 69842
  • stats Themen insgesamt: 9396
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Eigenes Dialogfeld statt Access-Meldung  (Gelesen 3137 mal)

Offline gromax

  • Access-Profi
  • **
  • Beiträge: 233
Eigenes Dialogfeld statt Access-Meldung
« am: November 10, 2014, 01:41:54 »
Hallo Access-Gemeinde,
hallo DF6GL,

wieder mal weiß ich nicht weiter und ich schreibe Dich, DF6GL, direkt an, weil Du zu Jahresbeginn dieses Thema auf Anfrage schon einmal angerissen hast.
Ich erstelle zur Personalverwaltung eine DB, in der Namen, Dauer der Ausfallzeit und auch die Ersatzregelung im Hauptformular und den beiden Unterformularen erfasst werden.
Sollte der Anwender keine Ersatzregelung eingegeben haben, so moniert Access mit
Zitat
Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle 'tbl_ERSATZ' mit diesem Datensatz in Beziehung stehen muss!
Das hat alles seine Richtigkeit, aber ich möchte ein eigenes, sprechenderes Dialogfeld (MsgBox) einblenden lassen und habe dem Button >Aktualisieren< folgenden Code mitgegeben:
Private Sub cmd_AktualisierenFrmAusfall_Click()
 
  If Me.frm_AUSFALLufo01.Form!ERS_FS.Value = Null Then
  MsgBox "Bitte geben Sie noch eine Ersatzregelung ein!"
  End If
 
  DoCmd.RunCommand acCmdSaveRecord
  Me.frm_AUSFALLufo02Liste.Requery
  Me.Liste18.Requery
 
End Sub

Es funktioniert aber leider nicht; der Access-Dialog drängt sich immer in den Vordergrund. Wahrscheinlich ist mein Code falsch oder ich habe ihn gar an der falschen Stelle untergebracht! Im Kombinationsfeld des Ufo1 habe ich ihn auch schon eingegeben (Bei Fokusverlust - Beim Verlassen) - aber keine Wirkmacht!!

Für eine Hilfe wäre ich äußerst dankbar!
Viele Grüße
gromax

p.s.: Zur Visualisierung habe ich noch einige Screenshots angehängt.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23580
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #1 am: November 10, 2014, 09:27:17 »
Hallo,

Wenn es sich bei diesem Feld um den Fremdschlüssel(wert) zu  "tbl_ERSATZ" handelt, dann wäre es sinnvoll, die Kombifeld-Eigenschaft "Nur Listeneinträge" auf ja zu setzen und etwa folgende Ereignisprozedur ("Bei nicht in Liste") zu benutzen:

Sub ERS_FS_NotInList(NewData As String, Response As Integer)
Docmd.Openform "frmErsatz",,,, acFormAdd, acDialog, NewData
Response =acDataErrAdded
End Sub


"frmErsatz" ist ein Einzel-Formular mit Datenherkunft zu "tbl_Ersatz", in dessen Load-Ereignis-Prozedur etwa dieses zu stehen kommt (vorausgesetzt, es handelt sich um Schlüsselfelder/werte vom Datentyp Zahl, Long):

Sub Form_Load()
If Not IsNull(Me.Openargs) Then Me!ERS_FS.DefaultValue = Me.Openargs
End Sub



Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #2 am: November 10, 2014, 11:31:45 »
Hallo gromax,

womit erreichst du, dass ein Fremdschlüssel verlangt wird, normal ist das eigentlich nicht.
Oder hast du den Standardwert des Fremdschlüssels vielleicht auf "0" eingestellt?

Die Prüfung auf vollständige und gültige Eingaben kannst du im Formular-Ereignis "Vor Aktualisierung" vornehmen.

Nachtrag:
Die Prüfung auf NULL geht folgendermaßen:If IsNull(Me.frm_AUSFALLufo01.Form!ERS_FS) Then
« Letzte Änderung: November 10, 2014, 12:45:03 von MaggieMay »
Freundliche Grüße
MaggieMay
 

Offline gromax

  • Access-Profi
  • **
  • Beiträge: 233
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #3 am: November 10, 2014, 22:39:46 »
Hallo DF6GL,

vielen Dank für die schnelle Antwort!!
Nun habe ich Dich hoffentlich richtig verstanden:
1. ERS_FS ist ein Fremdschlüsselwert zur Tabelle tbl_ERSATZ - korrekt
2. "Nur Listeneinträge" auf 'Ja' gestellt - erledigt
3. Code bei "Nicht in Liste"-Ereignis eingegeben - erledigt
Sub ERS_FS_NotInList(NewData As String, Response As Integer)
DoCmd.OpenForm "frm_ErsatzKontrolle", , , , acFormAdd, acDialog, NewData
Response = acDataErrAdded
End Sub
4. Neues Dialogfeld entworfen mit Kombinationsfeld (Datensatzherkunft tbl_ERSATZ) - erledigt (vgl.Anhang)
5. Code bei "Load"-Ereignis eingegeben
Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then Me!ERS_FS.DefaultValue = Me.OpenArgs
End Sub

Ergebnis:
Wenn ich eine neue Lehrkraft eingebe und die Ersatz-Option leer lasse, dann werden nach dem Aufruf des Aktualisieren-Button die übrigen Werte in der m:n-Tabelle tbl_LEK_KAT korrekt gespeichert, im Unterformular Ufo1 wird aber nichts mehr angezeigt. Trage ich in der tbl_LEK_KAT nun manuell einen Wert für ERS_FS nach, werden im Ufo1 auch die Daten wieder korrekt angezeigt?!

Ich habe noch weit ins Ziel - ich weiß!

Viele Grüße
gromax
 

Offline gromax

  • Access-Profi
  • **
  • Beiträge: 233
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #4 am: November 10, 2014, 23:26:42 »
Hallo MaggieMay,

was soll ich zu der Doppelbetreuung sagen? - Danke vielmals!

Ich habe Deine Hinweise umgesetzt:

- Der Standardwert stand wirklich auf '0'! - Habe diesen gelöscht!
- Wenn ich den Code wie unten eingebe,
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.frm_AUSFALLufo01!ERS_FS) Then
MsgBox "Bitte geben Sie noch eine Ersatzstellung ein!", vbOKOnly + vbInformation, "Bitte nacharbeiten!"
End If
End Sub
dann sehe ich das Dialogfeld (MsgBox), wenn ich bei der Dateneingabe vom HF (Lehrer-Name; Lehrer-Vorname; Lehrer-Deputat) zum Ufo1 weitergehe und dort eigentlich die betreffende Schule eingeben möchte. Ich vermute das HF aktualisiert sich automatisch, wenn ich dieses auch in Richtung Ufo verlasse und nicht erst, wenn ich zum Ende den Aktualisierungs-Button aufrufe.
Jetzt habe ich den Code in abgewandelter Form dem Aktualisierungs-Button beim Klick-Ereignis zugeordnet:
Private Sub cmd_AktualisierenFrmAusfall_Click()
 
If IsNull(Me.frm_AUSFALLufo01!ERS_FS) Then
  If MsgBox("Bitte geben Sie noch eine Ersatzstellung ein!", vbOKOnly + vbInformation, "Bitte nacharbeiten!") = vbOK Then
    Me!Forms!frm_AUSFALL!frm_AUSFALLufo01.ERS_FS.SetFocus
  End If
End If

DoCmd.RunCommand acCmdSaveRecord
  Me.frm_AUSFALLufo02Liste.Requery
  Me.Liste18.Requery
  Me.Liste9.Requery

End Sub

Jetzt funktioniert die Kontrolle und das Aufzeigen der MsgBox wie gewünscht; aber nach dem Klick auf OK fährt der Code fort, anstatt im Kombinationsfeld auf die Eingabe der Ersatz-Regelung zu warten. Kannst Du mir dazu helfen?

Danke vorab!

Alles Gute
gromax
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7734
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #5 am: November 10, 2014, 23:53:55 »
Hallo,
der Code macht das was Du ihm sagst. Da gibt es keinen keinen Befehlt der aufhört.
Versuche es mal so;
Private Sub cmd_AktualisierenFrmAusfall_Click()
If IsNull(Me.frm_AUSFALLufo01!ERS_FS) Then
  If MsgBox("Bitte geben Sie noch eine Ersatzstellung ein!", vbOKOnly + vbInformation, "Bitte nacharbeiten!") = vbOK Then
    Me!Forms!frm_AUSFALL!frm_AUSFALLufo01.ERS_FS.SetFocus
    Exit Sub ' aussteigen bzw. hier aufhören
  End If
End If
DoCmd.RunCommand acCmdSaveRecord
  Me.frm_AUSFALLufo02Liste.Requery
  Me.Liste18.Requery
  Me.Liste9.Requery
End Sub
Gruß
Klaus
 

Offline gromax

  • Access-Profi
  • **
  • Beiträge: 233
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #6 am: November 11, 2014, 00:51:13 »
Hallo MzKIMu,

danke für Deine Unterstützung; Du hast schon recht, VBA macht immer, was ihm sagt, wenn man weiß, wie man es ihm sagt!?!
Dein Ansatz ist klasse! Nur der Code springt nicht in das Feld und moniert, dass Access dieses angesprochene Feld nicht finden; der Code wird bei
Me!Forms!frm_AUSFALL!frm_AUSFALLufo01.ERS_FS.SetFocus

angehalten.
Ich denke die Schreibweise (Zeichen, Syntax) ist fehlerhaft. Der Hinweis mit 'Exit Sub' gibt bestimmt die richtige Richtung vor, ich tüftle natürlich weiter und bin weiterhin für jeden Tipp dankbar.

Danke vorab!!

Viele Grüße
gromax

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7734
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #7 am: November 11, 2014, 09:40:30 »
Hallo,
Du bist ja im gleichen Formular die (vermutlich) fehlerhaft Formularreferenz dürfte daher nicht notwendig sein. Versuche es mal so:
Me.ERS_FS.SetFocus
Gruß
Klaus
 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #8 am: November 11, 2014, 12:39:27 »
Hallo,
Me!Forms!frm_AUSFALL!frm_AUSFALLufo01.ERS_FS.SetFocuszur Ergänzung:
entweder "Me" oder "Forms", beides zusammen geht nicht. Und bei Unterformularen stets die Eigenschaft "Form" hinzufügen, sicherheitshalber.
Der vollständige Bezug zum Steuerelement im Unterformular sähe also so aus:Forms!frm_AUSFALL!frm_AUSFALLufo01.Form!ERS_FS.SetFocusdoch sollte der relative Bezug über "Me" nach Möglichkeit bevorzugt werden.
Freundliche Grüße
MaggieMay
 

Offline gromax

  • Access-Profi
  • **
  • Beiträge: 233
Re: Eigenes Dialogfeld statt Access-Meldung
« Antwort #9 am: November 16, 2014, 00:50:22 »
Hallo MzKIMu,
hallo MaggieMay,

sorry für die verspätete Antwort, aber ich bin erst heute wieder zu der DB gekommen.

Die Codes
Me.frm_AUSFALLufo01.Form!ERS_FS.SetFocus
bzw.
Forms!frm_AUSFALL!frm_AUSFALLufo01.Form!ERS_FS.SetFocus
funktionieren beide bestens. Der Speichervorgang wird unterbrochen und ich kann die Eingabe vollziehen.

Nun habe ich heute noch folgende Version eingepflegt:
Me.frm_AUSFALLufo01.SetFocus
Me.frm_AUSFALLufo01!ERS_FS.SetFocus
die hat sogar den Vorteil, dass ein blinkender Cursor im Kombifeld "wartet". Diese Version habe ich "irgendwo" gefunden und angepasst.

Euch allen vielen Dank!
Das hier ist das beste Forum zu Access - mit großem Abstand!!

Viele Grüße
gromax

p.s.: Ich muss bestimmt bald wieder kommen!
 

 

Eigenes Kontextmenü wie Druckerauswahlpopup

Begonnen von -Tom-Board Access Programmierung

Antworten: 1
Aufrufe: 2597
Letzter Beitrag Dezember 16, 2010, 12:07:57
von T417
eigenes Kontextmenü in 64bit Access

Begonnen von jaggerBoard Access Programmierung

Antworten: 7
Aufrufe: 61
Letzter Beitrag März 25, 2019, 21:24:14
von markus888
Eigenes Dialogfeld statt Access-Meldung 2

Begonnen von gromaxBoard Formular

Antworten: 6
Aufrufe: 3446
Letzter Beitrag März 01, 2015, 18:30:05
von gromax