Wie vorgehen bei Filter auf UF?

Moderator: ModerationP

Wie vorgehen bei Filter auf UF?

Beitragvon SabrinaP » 14. Apr 2021, 08:10

Guten Morgen,

ich habe da mal eine Frage bevor ich anfange in eine Richtung zu suchen, die vielleicht nicht so toll ist.

Ich habe auf einem Formular frmX ein Unterformular UfrmY. Die Datensätze dieses Unterformulars möchte ich auf verschiedenste Weisen filtern:

Zum Einen nach dem Ersteller:
  • nur Eigene Einträge
  • Einträge von Benutzer XYZ
  • Eintgräge von Allen

Zum Anderen aber auch nach dem Erstellungs-Jahr:

  • alle Jahre
  • nur aktuelles Jahr
  • nur Vorjahr
  • anderes bestimmtes Jahr

...und nach dem Status:

  • nur mit Status '1', '2' und '3'
  • alle Stati
  • bestimmter Status

Die Filter sollen aber auch kombiniert werden können. Ich will also zum Beispiel:

  • Nur meine Einträge aus dem letzten Jahr
  • Nur meine Einträge aus dem letzten Jahr mit dem Status '1', '2' und '3'
  • Nur Einträge von Benutzer XYZ aus dem letzten Jahr mit Status '1', '2' und '3'
  • ...(nur mal als Beispiele)

Meine Grundidee war mit Schaltflächen zu arbeiten, das halte ich für sehr nutzerfreundlich. Allerdings aufgrund der vielen Möglichkeiten könnte es schnell unübersichtlich werden.
Meine zweite Idee war lieber mit Auswahlfeldern zu arbeiten. Im ersten Auswahlfeld hat man alle Nutzernamen zur Auswahl, die Einträge erstellt haben und zusätzlich "Alle". Hierüber gibt man an von wem man Datensätze sehen will. Von einer bestimmten Person oder von allen.
Im zweiten Auswahlfeld dann eine Auswahl, ob "dieses Jahr", "letztes Jahr" oder ein anderes bestimmtes Jahr.
So dann auch beim Status

Meine dritte Idee baut auf der zweiten auf:
Filtern nach Benutzer: (Alle / Meine / Bestimmter) - bei Auswahl "Bestimmter" muss der Nutzer aus einem zweiten Auswahlfeld gewählt werden
Analog dann auch mit dem Jahr und dem Status

Was haltet Ihr für am sinnvollsten? Oder habt Ihr bessere Ideen?
Sinnvoll für mich wären dann Stichwörter, die ich für eine Recherche nutzen kann, wie ich das ganze umsetze. :-)

Vielen Dank für Eure Ideen!

Bina
SabrinaP
 

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Bitsqueezer » 14. Apr 2021, 08:33

Hallo Bina,

da solche Probleme in Deinem "Datenbankleben" noch oft vorkommen werden und auch bei mir oft vorgekommen sind und ich es leid war, jedesmal eine formular- und tabellenspezifische Lösung neu zusammenzubasteln, habe ich eine Universalfilterklasse gebaut, mit der Du genau sowas ganz simpel lösen kannst.

Im Wesentlichen mußt Du nur ein paar Module in die Datenbank laden, einen kurzen Init-Code starten und alles Andere macht diese Filterklasse (Demodatenbank ist enthalten).

Die Klasse gibt es in zwei Abstufungen: In der älteren Version (die in der neuen enthalten ist) mußt Du die Filterfelder (Komboboxen, Checkboxen, Textboxen) selbst erstellen und nach einem festen Namensschema benennen. Die Filterklasse "programmiert" diese dann passend für Dich anhand des Recordsets Deines Formulares.
In der 2., neueren Version geht die Klasse noch einen Schritt weiter und Du mußt nur noch einen Button zum Aufruf eines Popup-Filterformulares integrieren und den Init-Code aufrufen, das Formular enthält dann ganz automatisch alle Felder Deines Recordsets als Filter. Alles natürlich konfigurierbar, wenn Du etwa nicht alle Felder im Filter haben willst oder andere Namen anzeigen möchtest.

Kannst Du Dir unter CCFilter V2_7 auf meiner Downloadseite www.ccedv.de herunterladen, frei verwendbar.

Natürlich kannst Du das auch selbst programmieren, aber ist dann immer mit neuem Aufwand verbunden, wenn Du etwa mal ein weiteres Feld hinzunehmen willst oder sich die Tabelle/Abfrage ändert.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8497
Registriert: 21. Jun 2007, 12:17

Re: Wie vorgehen bei Filter auf UF?

Beitragvon SabrinaP » 14. Apr 2021, 09:05

Hallo Christian,

wow..ich habe mir das mal runtergeladen. Vielen Dank!

Ich habe mal mit den verschiedenen Formularen rumgespielt. Das gefällt mir sehr gut. Da steckt ne Menge Arbeit drin! Respekt!

Was mir aufgefallen ist:
- Es funktioniert bei mir nicht alles:
- frmFilterDemoPopup: Formular öffnet, Filter lässt sich über Schaltfläche aber nicht aufrufen (keine Fehlermeldung)
- frmFilterDemoPopup2: Formular öffnet, Filter 1 und 2 lassen sich über Schaltfläche aber nicht aufrufen (keine Fehlermeldung)
- frmFilterHFODemo: Lässt sich öffnen, aber erst nach Fehler: "Could not load the language file!"
- frmFilterHFODemo_SF: Lässt sich nicht öffnen: Laufzeitfehler 2452 "Der von Ihnen eingegebene Ausdruck enthält einen ungültigen Verweis auf die Hauptobjekt-Eigenschaft". Debuggen, Markierung bei:

Code: Alles auswählen
Private Sub Form_Load()
...
ObjFilter.InitControls Me, Me.Parent
...
End Sub


Ich würde die Funktion gemäß frmFilterDemo2 bevorzugen. Das finde ich echt genial. Die Felder würde ich gerne in mein Formular einbinden (nicht als Popup).

Eine Anleitung dafür gibt es nicht, oder? Habe dazu nix gefunden.
Welche Module muss ich in meine Datenbank kopieren und wie ist das mit dem Init-Code?

Schonmal tausend Dank, das wird besser, als ich es mir erträumt hatte (vorausgesetzt ich bekomme das hin)! :-)

Bina
SabrinaP
 

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Bitsqueezer » 14. Apr 2021, 09:55

Hallo Bina,

ja, das ist der Tatsache geschuldet, daß ich das damals auf 2 Monitoren entwickelt habe und Access hat sich die Position des Popup-Formulares gemerkt. Das kannst Du verbessern, indem Du in Form_Load des Popup-Formulares ein "DoCmd.MoveSize" einsetzt und die Position selbst festlegst.

Wenn das Formular geöffnet wird, kannst Du auch ohne das per Alt-Leerzeichen das Systemmenü des (unsichtbaren) Formulares aufrufen und dann per Verschieben auf den Hauptbildschirm legen.

Das betrifft die beiden Popup-Demos.

Die Language-Datei habe ich wohl vergessen, in die Zip zu kopieren, hier die nötige XML-Datei:
Translations.zip


Diese wird allerdings nicht zwingend benötigt für die Filterklasse. Die XML-Datei "füttert" die Klassen "clsCCLanguage..." mit den Übersetzungstexten für die Überschriften im Unterformular, das Formular "frmFilterHFODemo" soll eigentlich zeigen, daß man (wie oben beschrieben für die ältere Methode) eigene Filterfelder auch in einem Hauptformular einsetzen kann, obwohl das Unterformular damit gefiltert werden soll.
Da hier auch der Sprachwechsel gezeigt werden soll, der Bestandteil der Filterklasse ist, wurde hier halt zusätzlich die Language-Klasse integriert, die beliebige dynamische Übersetzungen für beliebige Elemente ermöglicht. Die Language-Klasse ist also nur ein Plus, das man auch unabhängig von der Filterklasse verwenden kann.

Für den Einbau der Klassen in eigene Datenbanken braucht es nicht viel: Einfach alle Module und Formulare, die "CCFilter" im Namen enthalten, in die eigene Datenbank ziehen und dann analog zu den Demoformularen den Init-Code einbauen, also entsprechende modulglobale Variable für die Klasse und Init für die Klasse, wie in den Demos gezeigt - je nachdem, welche Variante Du umsetzen möchtest.

Optional eben dann noch die Language-Klassen/Module mit "CCLanguage" im Namen, wenn Du dynamischen Sprachwechsel in Deine Datenbank einbauen willst. Die XML-Datei ist ja nicht schwer zu verstehen oder anzupassen. Diese muß einfach nur im gleichen Ordner wie das Frontend liegen.

Die Variable aus "modVariables" mußt Du ebenfalls in ein Standardmodul Deiner Datenbank übernehmen (Beschreibung im Code).

Wenn Du im Forum nach "CCFilter" suchst (auch im alten), dann findest Du eine Menge Beiträge mit Fragen von Benutzern und weiteren Erläuterungen.

Gruß

Christian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8497
Registriert: 21. Jun 2007, 12:17

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Jogeli » 14. Apr 2021, 18:46

Hallo Christian
Da wir schon vom CCFilter reden. Ich finde ihn genial und verwende ihn auch in einzelnen Anwendungen. Danke für deine Arbeit.

Aber jetzt kommt der Haken. In der Demo-DB gibt es die beiden Formulare
- frmCCFilterPopup
- frmCCFilterPopup_SF

Ich kann in der Entwurfsansicht frmCCFilterPopup öffnen. Mit einem
Code: Alles auswählen
DoCmd.MoveSize 1440, 2400, , 2000

beim FormLoad dachte ich das Problem mit dem 2. Monitor zu umschiffen (ich habe gar keinen 2. Monitor).
Wenn ich das Formular nun "normal" öffne, wird das Formular auch angezeigt, vorher war das nicht der Fall.

Das Problem ist aber ganz anders. Ich kann das Formular wie oben beschrieben in der Entwurfsansicht oder ganz normal öffnen, dann schliesse ich es wieder.
Der "Erfolg"? ist, die Datenbank lässt sich nachher nicht mehr schliessen. Nun wollte ich die beiden Formulare löschen. Geht nicht. Fehlermeldung siehe unten

Wie kann ich die beiden Formular löschen, wenn ich sie vorher schon geschlossen habe? Aber nun kommt der Hammer. Die Datenbank lässt sich auf keinem normalen Weg mehr schliessen. Es bleibt nur noch der TaskManager. Aber das kann es ja nicht sein.
Frage: braucht es die beiden erwähnten Formular überhaupt? Oder wäre es nicht besser, diese aus der Demo-Datenbank zu entfernen?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gruss
Köbi
Jogeli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 57
Registriert: 20. Feb 2016, 14:07

Re: Wie vorgehen bei Filter auf UF?

Beitragvon ComputerVersteher » 14. Apr 2021, 19:40

Hi Jogeli,

das gehört so! Schau Dir mal den Code (und die Kommentare) des frmCCFilterPopup Form_Unload Events an. Dort wird das schließen verhindert (bolUnload wird in Form_Load auf False gesetzt) und das Formular statt dessen unsichtbar gemacht (so bleiben bei einem erneutem Aufruf des Popup die Filterwerte erhalten).

Geschlossen wird das Popup im Form_Unload Event des aufrufenden Formulars (in der Demo frmFilterPopupDemo).

Zum spielen kannst Du im Form_Load Event von frmCCFilterPopup bolUnload auf True setzen, dann lässt sich das Formular schließen. Aber nicht vergessen das wieder rückgängig zu machen!

Die beiden Formulare brauchst Du nur wenn Du das Popup benutzen willst, aber löschen macht in der Demo keinen Sinn da nur zur Demo ;) In Deiner DB brauchst Du für den Filter direkt im Formular nur die Module (Standard und Klassen) zu importieren die nicht Popup im Namen haben, aber dann musst Du später die fehlenden Module nochmal importieren, falls Du doch das Popup nutzen willst. Die paar KB die das spart sind es kaum wert.

Access Entwicklung macht im übrigen mit 2 Monitoren wesentlich mehr Spaß!

Gruß CV
"Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."
Benutzeravatar
ComputerVersteher
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 553
Registriert: 23. Jul 2016, 18:17

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Bitsqueezer » 14. Apr 2021, 20:40

Hallo zusammen,

freut mich immer, wenn die Klassen für jemanden nutzbringend sind.

Ja, CV hat ja schon alles erklärt, danke für den Support...:)

In der Demo müssen die natürlich enthalten sein, weil es eben beide Varianten zeigt und das Popup-Formular ist erst später hinzugekommen, das Original hatte nur die einfache Filterklasse. Mir war aber auch das noch zuviel Arbeit, jedesmal die Felder neu zu erzeugen, zu benennen, passend zu layouten usw.

Daher ist der Maximalkomfort natürlich die Popup-Filter-Methode, die ja auch noch erweitert werden soll um eine ORDER BY Steuerung und speicherbare Filter, aber ich habe selten Zeit dazu, weil man dazu schon am Stück einige Tage programmieren muß. "Nebenbei" am Feierabend ist das nicht möglich. Die Version 2.8 und 3.0 als unfertige Version findet der aufmerksame Forenwühler aber auch in der Suche...;)

Ja, 2 Monitore macht schon Spaß...aber jetzt habe ich meinen 50"-Smartfernseher als Monitor, DAS macht erst richtig Spaß, ist in etwa wie 4 25"-Monitore auf einer Fläche... :mrgreen:

Und nebenbei kann ich mir per PiP noch was im Fernsehen ansehen...:)

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8497
Registriert: 21. Jun 2007, 12:17

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Jogeli » 14. Apr 2021, 21:13

Danke an CV und Christian

Nun habe auch ich es endlich verstanden. :mrgreen:
Gruss
Köbi
Jogeli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 57
Registriert: 20. Feb 2016, 14:07

Re: Wie vorgehen bei Filter auf UF?

Beitragvon SabrinaP » 16. Apr 2021, 09:04

Hallo nochmal,

ich habe jetzt lange hin und her probiert, bin mehrfach verzweifelt. Es hat einfach nicht hingehauen. Ich habe sämtliche Module, Klassenmodule, Formulare aus Deiner DB in meine DB exportiert. Aber ohne Erfolg, ich habe immer die relativ nichtssagende Fehlermeldung beim Start des Formulars erhalten bekommen, dass ein Fehler beim Onload-Ereignis des Formulars aufgetreten ist.
Dann habe ich nochmal eine neue DB erstellt und wirklich 1:1 alles rüber kopiert inklusiv der Tabelle mit den Testdaten um wirklich NULL geändert zu haben. Gleicher Erfolg.

Ein paar Kaffee später habe ich mich gefragt, was denn da jetzt noch unterschiedlich sein kann und bin auf die Verweise gekommen. Das war das einzige, was noch hätte anders sein können. Also Verweise gecheckt. Mit fehlten 4 Verweise. Der Verweis zu "Microsoft Forms 2.0" wurde mir nichtmal in der Liste als verfügbarer Verweis angezeigt. Da ich aber Deine DB auch auf hatte konnte ich sehen, wo die entsprechende Datei lag und konnte ihn so noch extra rein laden. Mit Erfolg! Der erste Test hat funktioniert. Jetzt kann ich Stück für Stück die nicht benötigten Formulare wieder raus löschen.
Muss ich diese Sprach-Geschichte irgendwo deaktivieren? Oder kann ich einfach alle Klassen mit "Language" raus löschen?

Danach kann ich dann mal ins "Feintuning" gehen und mir ansehen, ob ich irgendetwas anpassen muss, aber es scheint ja alles automatisch abzulaufen (wenn es denn einmal läuft) und man die Felder richtig benannt hat. :-)


Bina
SabrinaP
 

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Bitsqueezer » 16. Apr 2021, 10:09

Hallo Bina,

also bei den Referenzen brauchst Du eigentlich nichts anzupassen.

Warum MSForms drin ist, weiß ich nicht, wahrscheinlich irgendwann bei der Entwicklung mal gebraucht hab, aber das brauchst Du nicht. Laut dem hier kann man es aber, wenn einmal gesetzt, nicht mehr entfernen:
https://answers.microsoft.com/en-us/mso ... be09c147eb

Die Filterklasse-Datenbank braucht es nicht.

Die Referenz zur XML-Library wird nur gebraucht, wenn Du die LanguageEvent-Klassen mit implementieren möchtest.
Die ADO-Referenz wird hier auch nicht gebraucht.
Benötigt wird hier lediglich die Referenz auf die Office xx.x Object Library. Aber die wird oft ohnehin schon implementiert.

Außerdem, wenn Du auf die Language-Klassen verzichtest, mußt Du noch die Enum in z.B. ein Standardmodul kopieren:
Code: Alles auswählen
Public Enum EnmAvailableLanguages
    enmAvLang_DE
    enmAvLang_EN
    enmAvLang_Last  ' Indikator für letztes Element
End Enum


Da diese in der Demo nur in der LanguageEvent-Klasse definiert ist.

Wenn Du also nur die einfache Variante ohne Popup-Filter implementieren willst, mußt Du nur diese Objekte kopieren:
Code: Alles auswählen
modCCFilterContextMenu
modVariables (die eine Variable kannst Du aber auch stattdessen irgendwo in einem Deiner Standardmodule unterbringen)
clsCCFilter
clsCCFilterContextMenu
clsCCFilterContextMenuButton
clsCCFilterField
ICCFilterCallbacks


Das war's auch schon.

Nachdem Du alle Filterfelder eingebaut hast, genügt dann im Formularcode:
Code: Alles auswählen
Private ObjFilter As clsCCFilter

Private Sub Form_Load()
    Set ObjFilter = New clsCCFilter
    'ObjFilter.FilterAllowOnChange = True   ' bei Bedarf, für größere Listen nicht empfehlenswert
    ObjFilter.InitControls Me
    ObjFilter.FilterChangeLanguage enmAvLang_DE  ' wenn Du die Filtersprache auf Deutsch einstellen willst, ansonsten in "Class_Initialize von clsCCFilter als Default einstellbar
End Sub


Weil oft übersehen: Versuche auch mal, die rechte Maustaste in einem Filterfeld zu klicken, um weitere Filteroptionen einzustellen.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8497
Registriert: 21. Jun 2007, 12:17

Re: Wie vorgehen bei Filter auf UF?

Beitragvon SabrinaP » 19. Apr 2021, 18:41

Hallo nochmal,

also ich muss jetzt mal sagen: Ich habe echt lange gebraucht um das bei mir ordentlich einzubauen und entsprechend zu konfigurieren. Aber jetzt, wo ich es geschafft habe: WOW - Perfekt, das ist echt genial!

Herzlichen Dank, dass Du so etwas Tolles gebaut hast und auch noch kostenfrei zur Verfügung gestellt hast! Ich bin echt begeistert.

Danke!

Bina
SabrinaP
 

Re: Wie vorgehen bei Filter auf UF?

Beitragvon Bitsqueezer » 19. Apr 2021, 21:07

Hallo Bina,

freut mich, wenn es hilfreich für Dich ist...:)

Gratuliere, daß Du es erfolgreich implementieren konntest.

Viel Spaß damit und Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8497
Registriert: 21. Jun 2007, 12:17


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Jogeli und 3 Gäste