FilterStringBuilder & Co.

Diskussionen über den Quellcode (Module, Klassenstruktur, Schnittstellen u.s.w.) der Access Code Library

Re: FilterStringBuilder & Co.

Beitragvon Josef Pötzl » Mi 20. Apr 2016, 22:49

Nächste Erweiterung:

Feldname In (select ...)
Code: Alles auswählen
With New FilterStringBuilder

   With .AddSubSelectCriteria("fiXyz", SQL_In, "Select idXyz From Tabelle", , SQL_Or)
      .Add "x", SQL_Numeric, SQL_Equal, 4
      .Add "y", SQL_Numeric, SQL_Equal, 5
   End With
   Debug.Print .ToString
   
End With

ergibt:
(fiXyz In (Select idXyz From Tabelle Where (x = 4) Or (y = 5)))



Exists (select ...)
Code: Alles auswählen
With New FilterStringBuilder

   With .AddExistsCriteria("Select * From Tabelle")
      .AddCriteria "idXyz = T2.fiXyz"
      .Add "x", SQL_Numeric, SQL_Equal, 4
   End With
   Debug.Print .ToString
   
End With

ergibt:
(Exists (Select * From Tabelle Where (idXyz = T2.fiXyz) And (x = 4)))
Josef Pötzl
Moderator
 
Beiträge: 706
Registriert: Mo 30. Nov 2009, 11:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: FilterStringBuilder & Co.

Beitragvon Andreas Vogt » Do 21. Apr 2016, 19:58

Hallo Josef,
die Erweiterungen finde ich sehr sinnvoll, haben aber imo auch Schwächen.
SQL_Or bezieht sich auf alle Vergleiche, lässt also gemischt And/Or nicht zu.

Gruß Andreas
Andreas Vogt
Entwickler
 
Beiträge: 151
Registriert: Do 18. Mär 2010, 19:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: FilterStringBuilder & Co.

Beitragvon Josef Pötzl » Do 21. Apr 2016, 20:47

Hallo Andreas!

Wenn du And und Or gemischt verwenden willst, kannst du dafür die ConditionGroup verwenden.

Beispiel:
Code: Alles auswählen
With New FilterStringBuilder

   .Add "a", SQL_Numeric, SQL_Equal, 123

   With .AddSubSelectCriteria("fiXyz", SQL_In + SQL_Not, "Select idXyz From Tabelle", True, SQL_And)
      .Add "b", SQL_Text, SQL_Equal, "xyz"
      With .NewConditionGroup(SQL_Or)
         .Add "x", SQL_Numeric, SQL_Equal, 4
         .Add "y", SQL_Numeric, SQL_Equal, 5
      End With
   End With
   Debug.Print .ToString
   
End With
 


Ergebnis:
((a = 123)) And (fiXyz Not In (Select idXyz From Tabelle Where ((b = 'xyz')) And ((x = 4) Or (y = 5))))

LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 706
Registriert: Mo 30. Nov 2009, 11:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: FilterStringBuilder & Co.

Beitragvon Josef Pötzl » So 24. Apr 2016, 00:05

Nächste Erweiterung: Aus Textwert mit ; ein Array erzeugen und die einzelnen Werte zum Filtern verwenden.

Code: Alles auswählen
With New FilterStringBuilder

   .Add "X", SQL_Text, SQL_Like + SQL_Add_WildCardSuffix, Array("a", "b", "c")
   .Add "Y", SQL_Text, SQL_Like + SQL_Add_WildCardSuffix, Split("a;b;c", ";")
   .Add "Z", SQL_Text, SQL_Like + SQL_Add_WildCardSuffix + SQL_SplitValueToArray, "a;b;c"
   
   Debug.Print .ToString
   
End With

Alle 3 Zeilen (X, Y, Z) erzeugen die gleiche Syntax für den Filterausdruck.

Anm.: Interessant wird das Feature, wenn man nicht Werte in VBA schreibt, sondern Werte aus Textfeldern übernimmt, die der Anwender füllt. Bei SQL_SplitValueToArray wirkt immer noch die Null-Prüfung und man muss sich nicht im Code darum kümmern. Wegen: Split(Null, ";"), das zu einem Fehler führen würde.
Josef Pötzl
Moderator
 
Beiträge: 706
Registriert: Mo 30. Nov 2009, 11:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: FilterStringBuilder & Co.

Beitragvon Josef Pötzl » So 11. Dez 2016, 18:21

Ab Version 1.5.0 kann man die Codemodule für die Filterung aus dem Repository aktualisieren lassen.

Ablauf:
  1. Klick auf "Klassen installieren"
  2. "Codemodule in Add-In aus SVN-Repository aktualisieren" auswählen
  3. Anschließend das Add-In wie zuvor verwenden (z. B. die in der Anwendung enthaltenen Codemodule aktualisieren, neu einfügen usw.)

Bild
Josef Pötzl
Moderator
 
Beiträge: 706
Registriert: Mo 30. Nov 2009, 11:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Vorherige

Zurück zu Quellcode

cron