Falls mal jemand Lust hat, ein paar Klassen zu testen: in der Codelib gibt es nun eine Klassenstruktur zum Erstellen von Filterbedingungen.
SqlTools (Klasse): umgestaltetes SqlTools.bas-Codemodul, damit mehrere SQL-Dialekte parallel verwenden werden können. (Attribute VB_PredeclaredId = True ist gesetzt - damit ist immer eine Standardinstanz verfügbar. Der Import ohne ACLibImportWizard oder ACLibFilterFormWizard muss über Datei-Import erfolgen, damit dieses Attribut gesetzt wird. Beim Einfügen des Codes in eine leere Klasse muss man das selbst einstellen, falls man es nutzen will.)
FilterStringBuilder: Filterausdruck als String erzeugen.
FilterControlManager: Filterausdruck direkt aus Formular-Steuerelementen erstellen
Beispiel-DB: FilterStringBuilderBsp
Zum Einfügen in eine Anwendung gibt es das Add-In: ACLibFilterFormWizard
BTW: Wenn das Interface für die Access-Klassenstruktur einigermaßen steht, möchte ich die Funktionaltät in der DotNetLib abbilden und mit den AccessCodeLib.Data.SqlTools kombinieren.
Mögliche Varianten:
Stufe 1: nur Datentyp in Sql-tauglichen Text umwandeln.
- Code: Alles auswählen
SqlText = "TextDatenfeld like " & SqlTools.TextToSqlText("ab'de*")
' oder
SqlText = "DatumsDatenfeld = " & SqlTools.DateToSqlText(Date)
' oder
SqlText = "ZahlenDatenfeld = " & SqlTools.NumberToSqlText(1.234)
Anm.: Die SqlTools-Standardinstanz muss vor der ersten Verwendung an den benötigten SQL-Dialekt angepasst oder innerhalb der Klasse die Konfigurations-Konstanten eingestellt werden.
Stufe 2: BuildCriteria verwenden
- Code: Alles auswählen
SqlText = SqlTools.BuildCriteria("TextDatenfeld", SQL_Text, SQL_Like, "ab'de*")
' oder
SqlText = SqlTools.BuildCriteria("DatumsDatenfeld", SQL_Date, SQL_Equal, Date)
' oder
SqlText = SqlTools.BuildCriteria("ZahlenDatenfeld", SQL_Numeric, SQL_Equal, 1.234)
Stufe 3: Zusammengesetzten SQL-Filter-Ausdruck mit FilterStringBuilder erstellen:
- Code: Alles auswählen
With New FilterStringBuilder
.Add "TextDatenfeld", SQL_Text, SQL_Like, "ab'de*"
.Add "DatumsDatenfeld", SQL_Date, SQL_Equal, Date
.Add "ZahlenDatenfeld", SQL_Numeric, SQL_Equal, 1.234
SqlText = .ToString(SQL_And)
End With
Stufe 4: Die Filtersteuerung in einem Formular an den FilterControlManager abgeben.
- Code: Alles auswählen
Private WithEvents m_FilterControlManager As FilterControlManager
[...]
Private Sub InitFilterControls()
With m_FilterControlManager.FilterControls
.Add "TextDatenfeld", SQL_Text, SQL_Like, Me.txtFilterControlTextDatenfeld
.Add "DatumsDatenfeld", SQL_Date, SQL_Equal, Me.txtFilterControlDatumsDatenfeld
.Add "ZahlenDatenfeld", SQL_Numeric, SQL_Equal, Me.txtFilterControlZahlenDatenfeld
End With
End Sub
mfg
Josef