Neuigkeiten:

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

Mobiles Hauptmenü

Unverträglichkeit zweier Codezeilen

Begonnen von Brallu, April 19, 2019, 22:16:04

⏪ vorheriges - nächstes ⏩

Brallu

Hallo Gemeinde, :)
leider habe ich schon wieder ein Problem.
Im Hauptformular habe ich ein Listenfeld erstellt. Dieses soll bei einem Datensatzwechsel immer aktualisiert werden.
Dies wollte ich mit Me.lstPfad.Requery  beim Anzeigen (Form_Current des Haupt-FRMs) bewerkstelligen.
Hier steht aber auch schon Me!frmPruefPruefungUFO.Form.DataEntry = True um ein UFO zu zwingen einen neuen Datensatz zu erzeugen.
Diese beiden vertragen sich aber nicht und ich verstehe nicht warum?
Wenn beide drin stehen dann klappt das mit dem Aktualisieren aber das UFO erzeugt keine neuen Datensatz.
Wenn jemand eine Idee hat wäre ich echt glücklich!

Gruß
Danny

Hier noch der Code beim Anzeigen:
Private Sub Form_Current()
Me.lstPfad.Requery
Me!frmPruefPruefungUFO.Form.DataEntry = True
End Sub

Brallu

Hallo nochmal,
ich habe jetzt herrausgefunden das der Code funktioniert wenn ich den Datensatz manuell wechsel.
Ich habe aber 1 Suchfeld und wenn ich über dieses Feld einen Datensatz suche springt er auch zum gewünschten Datensatz und das Listenfeld wird auch aktualisiert. Aber das UFO wird nicht auf neuen Datensatz gesetzt.
Ich hoffe jetzt kann jemand meinen Fehler finden! :-[

Hier nochmal der Code:

Private Sub Kombinationsfeld56_AfterUpdate()
   Dim strFilter As String
   strFilter = "[RzNummerVerbunden] = '" & Me.Kombinationsfeld56 & "'"       
Debug.Print strFilter
   If DCount("*", "qryPruefMatAllesSortiert", strFilter) > 0 Then
      Me.Filter = strFilter
      Me.FilterOn = True 
   Else
       MsgBox "Diese Nummer ist nicht vergeben!", , "Achtung!"
   End If
Me.Kombinationsfeld56 = Null 'zurücksetzen/löschen des Suchbegriffs
End Sub

Private Sub Form_Current()
Me.lstPfad.Requery
Me!frmPruefPruefungUFO.Form.DataEntry = True
End Sub

DF6GL

Hallo,

warum setzt Du die Eigenschaft "Daten eingeben" nicht gleich in der Entwurfsansicht auf "Ja"?

Warum soll sich das Listenfeld bei jeden Ds-Wechsel aktualisieren?
Was ist die Datensatzherkunft dieses Listenfeldes?

Wenn es unbedingt bei (nach) dem Filtern aktualisiert werden muss, dann füg  Me.lstPfad.Requery nach Me.FilterOn = True ein.


Brallu

Hallo Franz  :) ,
hier erst einmal die Antworten auf deine Fragen:

warum setzt Du die Eigenschaft "Daten eingeben" nicht gleich in der Entwurfsansicht auf "Ja"?

Habe ich versucht aber es ändert sich nichts!

Warum soll sich das Listenfeld bei jeden Ds-Wechsel aktualisieren?

Weil es zu einem Datensatz die gespeicherten Hyperlinks und deren Beschreibung anzeigen soll.

Was ist die Datensatzherkunft dieses Listenfeldes?

SELECT tblMat.matID, tblPfadSpeichern.dokupfadPfad, tblPfadSpeichern.dokupfadBeschreibung FROM tblMat LEFT JOIN tblPfadSpeichern ON tblMat.matID = tblPfadSpeichern.dokupfadMat_F_ID WHERE (((tblMat.matID)=[Forms]![frmPruef1Hauptformular]![matID]));

Wenn es unbedingt bei (nach) dem Filtern aktualisiert werden muss, dann füg  Me.lstPfad.Requery nach Me.FilterOn = True ein.

Das hatte ich auch schon versucht aber auch hier keine Änderung.

Ich versuche mal ein lauffähiges Beispiel zu zaubern!!

Danke für deine Hilfe!!!!!

Gruß
Danny


Beaker s.a.

@Brallu
Da ".DataEntry" ist eine Eigenschaft ist und keine Methode kann da auch
nichts passieren.
Wenn die Eigenschaft standardmässig auf "True" gesetzt ist, brauchst du
nur den Focus auf das UFo setzen, - evtl. zusätzlich auf das erste Eingabefeld.
Me.Me!frmPruefPruefungUFO.SetFocus
'evtl.
Me!frmPruefPruefungUFO.Form.Eingabefeld.SetFocus

Steht die Eigenschaft auf "False" erreichst du einen neuen DS nach Setzen
des Focus mit
DoCmd.GotoRecord , , acNewRecord

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)

markusxy

#5
Zitat von: Beaker s.a. am April 20, 2019, 12:48:06
Da ".DataEntry" ist eine Eigenschaft ist und keine Methode kann da auch
nichts passieren.

OT:
Was nach oder während dem Ändern einer Eigenschaft passiert bestimmt bekanntlich der Programmierer.
Das ist doch der Sinn von Properties - dass man einen Code hinterlegen kann, der Änderungen überwacht, mögliche Events auslöst und vieles mehr.
Ansonsten ist man mit UDT's besser bedient und braucht keine Klassen.
Die Aussage an sich ist also furchtbarer Unsinn.
In diesem konkreten Fall ist sie falsch. Das merkst du bei einem simplen Test.
Da die Eigenschaft auch noch mit anderen Eigenschaften zusammenwirkt gilt es auch die Hilfe zu beachten.
Per Standard ist die Eigenschaft False, sonst könnte man ja nie bestehende Daten sehen, sondern nur neue erfassen.

Beaker s.a.

Hallo Markus,
Soo schlimm/falsch nun auch wieder nicht. Ich glaube du hast mich falsch
interpretiert.
ZitatWas nach oder während dem Ändern einer Eigenschaft passiert bestimmt bekanntlich der Programmierer.
Davon ist beim TS aber nichts zu sehen. Daher bin ich davon ausgegangen,
das er erwartet hat mit dem Setzen der DataEntry-Eigenschaft die von ihm
gewünschte Aktion auszulösen. Wollte also nur genau das, was du anmerkst
klarmachen, - ein gewünschtes Verhalten muss man u.U. selber programmieren.
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)

markusxy

Zitat von: Beaker s.a. am April 20, 2019, 18:26:07
Soo schlimm/falsch nun auch wieder nicht.
Ich fürchte schon.  :)

ZitatWas nach oder während dem Ändern einer Eigenschaft passiert bestimmt bekanntlich der Programmierer.
Ich meine natürlich den Programmierer der Klasse (also das Office Team von MS) und nicht den TS.
Die Aussage, dass das Ändern einer Property nichts bewirken kann ist seltsam.
Deshalb der Hinweis dazu.
Du wirst auch feststellen, dass die Änderung von Form Properties sehr oft Änderungen zur Folge hat und nicht nur dazu dienen, dass man den Wert auslesen kann.

Beaker s.a.

Hallo Markus,
O.K., meine Äusserung war unüberlegt, - ich sollte es echt öfter vorher
ausprobieren  >:(.
Dann frage ich mich aber, was der TS erwartet hat.
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)

Brallu

Hallo Markus und Ekkehard,
es ist tatsächlich für mich als VBA-Nochnichtversteher so, daß ich hier einfach zu blöd war die Zusammenhänge zu erkennen.
Aber manchmal muss man erst etwas aufschreiben um zu erkennen was wie zusammenhängt.
Ich danke euch für eure Beiträge und eure Zeit!

Me!frmPruefPruefungUFO.SetFocus war die Lösung aber ich habe jetzt eine Lösung
mit einem UFO umgesetzt. Alles viel einfacher und es funktioniert  :)

Gruß vom TS
Danny






markusxy

Schön wenn es klappt.
Ich würde dir auch generell empfehlen, hinter dem Me kein Rufezeichen zu verwenden.

Also Me.Control anstatt Me!Control.
Das Rufezeichen hat zwar in wenigen Fällen seine Berechtigung.
Es verhindert aber die Prüfung durch den Compiler.
Dadurch wird der Code unsicher und langsamer.
LG Markus

Brallu