Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fehler bei Filtern im Unterformular

Begonnen von ReneB, März 06, 2023, 10:25:03

⏪ vorheriges - nächstes ⏩

ReneB

Hallo an Alle,

bräuchte Hilfe bein einem Problem mit dem eingebauten Access Filter, welchen ich in einem Unterformular benutze.

Das Formular ist unterteilt in ein Haupt- und Unterformular. Über das Form_Klick Event im Unterformular läuft folgender code: Me.Parent.Form.Recordset.FindFirst "ID=" & Me!ID. Dieser sucht mir den passenden Datensatz im Hauptformular. Doch dieser Code macht Probleme beim Filtern im Unterformular, da auch der eingebaute Filter das Form_Click Even anspricht. Ich bekomme diverse Fehlermeldungen wie: Syntaxfehler im Abfrageausdruck oder Der Befehl oder die Aktion ist zurzeit nicht verfügbar. Deaktiviere ich den Code, fuktoniert der Filter ohne Probleme.
Habt Ihr einen Vorschlag, wie ich das anders gestalten kann oder wie ich diese Fehlermeldungen wegbekommen?
Danke sehr.
Renbe
 

ebs17

ZitatÜber das Form_Klick Event im Unterformular läuft folgender code: Me.Parent.Form.Recordset.FindFirst "ID=" & Me!ID. Dieser sucht mir den passenden Datensatz im Hauptformular.
Eigentlich würde man die Rollen umdrehen und vom HFo aus das UFo filtern. Für die einfache Zuordnung hilft dann schon eine simple Verknüpfung, ohne Event-Feuer.

Erst Abläufe planen, dann Codes schmieden.
Mit freundlichem Glück Auf!

Eberhard

ReneB

Hallo,

ja eigentlich kann man ja das geteilte Formular verwenden, allerdings dient in meinem Fall das  Unterformular zur Suche und das Hauptformular zur Datenbearbeitung. Im Unterformular sind nicht alle Daten vorhanden, deshalb habe ich diesen Weg gewählt.
Nun ja, ich werde daß wohl irgendwied neu strukturieren müssen.

Danke trotzdem.
Rene

Josef P.

#3
Hallo!

Ist das ein an ein Datenfeld vom Hauptformular gebundenes Unterformular?

Zitat... da auch der eingebaute Filter das Form_Click Even anspricht.
Hast du den Code schon im Einzel-Schritt durchlaufen?

Du könntest folgendes probieren:
Das UF löst ein eigenes Ereignis aus. Als Parameter wird der Filterausdruck übergeben.
Im HF wird darauf reagiert, speicherst den Filterausdruck in eine Klassenvariable und startest einen Formtimer (1 ms), damit die "Click"-Prozedur vom UF abgeschlossen werden kann.
Über die Reaktion auf das Timer-Ereignis wendest du den Filter im HF an. (Nicht vergessen: TimerInterval wieder auf 0 setzen.)


Zitateigentlich kann man ja das geteilte Formular verwenden
Du könntest auch ein ungebundenes Hauptformular mit 2 Unterformularen verwenden.
1. UF ... dein UF mit den Filtern
2. UF ... das Formular zum Bearbeiten.


Gruß
Josef


ReneB

Hallo und danke für die Anregungen.

Das Unterformular is bereits entkoppelt und wird über ein Recordset angesteuert. Ich erhalte trotzdem die gleichen Fehlermeldungen beim Filtern. Ich muss wohl das ganzes anders denken und die Datenbank anders aufbauen. Danke für Eure Hilfe.

Rene

Josef P.

Ich versuchte dein Problem nachzustellen, allerdings kommt kein Fehler.
Im Anhang sind verschiedene Varianten mit FindFirst und als Alternative mit Filter.

Falls du ein geteiltes Formular nachbilden willst, suche nach "Access Formulare synchronisieren" u.ä.

Gruß
Josef

ReneB

Hallo nochmal,

nun ich konnte es lösen. Ich habe FindFirst ID in das Form.Current Ereignis gepackt, somit gibt keinen Konflikt mehr mit dem Filtern von Datensätzen. Sieht bis jetzt gut aus.

Beaker s.a.

ZitatIch habe FindFirst ID in das Form.Current Ereignis gepackt,
IMO keine gute Idee, weil dabei zweimal gesucht und gefunden wird.
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)

ReneB

Guten Morgen,

kannst du mir das erklären? Es funktioniert wirklich ohne Probleme.

Danke sehr.

Beaker s.a.

Hallo Rene,
Die Ereignisprozedur "Form_Current" behandelt bei jedem DS-Wechsel
das Ereignis "OnCurrent" (Beim Anzeigen).
Das "FindFirst" löst diesen Wechsel beim ersten Aufruf aus, wodurch
"Form_Current" erneut aufgerufen wird, es wird also erneut gesucht
(= Arbeit).
Ein DS-Wechsel findet dann aber nicht mehr statt, da der DS ja beim
ersten Aufruf schon gefunden wurde, womit die "Schleife" beendet ist.
"OnCurrent" ist ein Ereignis, das von vielen anderen, DS-Wechsel
auslösenden Ereignissen getriggert wird. Da muss man bei der Ablauf-
steuerung böse aufpassen.

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)

ReneB

Hallo,

danke für die Erklärung. Ich werde es im Hinterkopf behalten.