User Tools

Site Tools


vba:lib:sqlfilter

This is an old revision of the document!


[VBA] SQL Filterstrings

SQL-Filterstrings erstellen ohne grosse Schlaufen und ohne sich um Formatierungen kümmern zu müssen. Das ist das Ziel der Funktion filByArray(). Die weiteren Funktionen sind nur Aliase dazu um häufig wiederkehrende Fälle vereinfacht abzudecken

lib_sqlfilter.bas

Beispiele zur Anwendung

'Bei der Funmtkion DLOOKUP mittels Filterstringfunktion filEq() Das Datum der ID 3 auslesen
? DLOOKUP("f_date", "my_table", filEq("id", 3))
14.03.2014 00:03:00 
 
'Auszählen, wieviele Zeilen im Feld f_string leer (Null/""/"  ") sind
? DCOUNT("*", "my_table", filEq("f_string"))
 3 

Beispiele zu den Funktionen

filEq()

Ein einfacher Equal Filter, der sich den Werten anpasst

'Vergleich mit einem Datum
?filEq("until", now)
[until] = #05/14/2014 12:13:02#
 
'Eine Zahl vergleichen
?filEq("id", 123)
[id] = 123
 
'Feld name soll Hans heissen
?filEq("name", "Hans")
[name] LIKE "Hans"
 
'Mit Angabe des Tabellenalias
?filEq("tabelle.name", "Hans")
[tabelle].[name] LIKE "Hans"
 
'Prüfen ob das Feld Leer, Null oder Leerstrings sind
?filEq("name")
TRIM(NZ([name])) = ""
 
'Auf Null prüfen
?filEq("name", null)
[name] IS NULL
 
'Auf mehrere Werte prüfen. Der erste Eintrag gibt den Datentyp vor
?filEq("id", 123, 456, 789)
[id] IN (123, 456, 789)

filNe()

Negative Version vom Equal-Filter

?filNe("tabelle.name", "Hans")
NOT [tabelle].[name] LIKE "Hans"
 
?filNe("name")
NOT TRIM(NZ([name])) = ""
TRIM(NZ([name])) = ""

filFld()

Einen Vergleich zwieschen 2 Feldern

?filfld("a.id", "b!id")
[a].[id] = [b].[id]
 
?filfld("a.id", "b!id", finot)
NOT [a].[id] = [b].[id]
 
?filfld("a.id", "b!id", fiCompGt+finot)
NOT [a].[id] > [b].[id]

filBetween()

?filBetween("id", 5, 13)
([id] BETWEEN 5 AND 13)
 
?filBetween("id", 5, 13, fiCompBetweenVB)
(5 <= [id] AND [id] <= 13)

'Between mit nur einem gültigen Argument ?filBetween(“a.f_date”, now, null) [a].[f_date] = #05/14/2014 15:05:44#

filAnd(), filOr()

Zwei Funktionen um schnell eine AND/OR Struktur zu erstellen

?filOr(filAnd(filNe("f_name", null), filNe("id", null)), filBetween("f_date", now-1, now))
(([f_name] NOT IS NULL AND [id] NOT IS NULL) OR ([f_date] BETWEEN #05/13/2014 14:04:04# AND #05/14/2014 14:04:04#))

fil()

Der flexible Filter, mit dem man diverse Kombinationen ausführen kann

'Datumfeld Grösser als Jetzt
?fil("f_date", fiCompGt, now)
[f_date] > #05/14/2014 14:06:22#
 
'dieses mal mit Grösser-Gleich und nur auf das Datum beschränkt
?fil("f_date", fiCompGe + fiTypeDate, now)
[f_date] >= #05/14/2014#
 
'Mal als Stringvergleich mit
?fil("f_date_string", fiCompEq + finot + fiTypeString, now)
NOT [f_date_string] = "14.05.2014 14:10:39"
 
'Und noch ein Beispiel mit IN()
?fil("table.id", fiCompEq, 1,2,3)
[table].[id] = 1
?fil("table.id", fiAutomatic, 1,2,3)
[table].[id] IN (1, 2, 3)
vba/lib/sqlfilter.1400072791.txt.gz · Last modified: 14.05.2014 15:06:32 (external edit)