Probleme mit Recordset-Filter

Ich habe Probleme mit einem filter auf ein ADO-Recordset im legacy-ASP-Classic-code, und ich versuche zu verstehen, ob das, was ich versuche zu tun, ist nicht unterstützt, oder wenn ich einfach nur etwas falsch.

Ich habe ein recordset Elemente, und Sie haben den Status 1 (aktiv) oder 0 (inaktiv), und ein optionales Enddatum. In meinem administrative user interface, habe ich ein Steuerelement zeigen Sie alle Elemente oder nur die, die angezeigt werden sollen end-zu-Benutzer: Status = 1 AND ( End_Date is null OR End_Date > Date() )

Zu implementieren, die Logik habe ich versucht:

rs.Filter = "Status = 1 AND ( End_Date = null OR End_Date > #" & Date() & "# )"

aber ich bekomme

ADODB.Recordset (0x800A0BB9)
Unknown runtime error

Nach viel herumalbern, es scheint, dass ADO nicht wie die Gruppierung parens rund um die End_Date Bedingungen in Kombination mit der UND-Bedingung. Wenn ich die Klammern aus, das funktioniert:

rs.Filter = "Status = 1 AND End_Date = null OR End_Date > #" & Date() & "#"

Aber das ist nur ein Unfall -- es sieht aus wie die filter-Bedingungen werden ausgewertet, und so bekomme ich die Ergebnisse die ich will. Wenn ich die UND ODER, die parens Arbeit:

rs.Filter = "Status = 1 OR ( End_Date = null OR End_Date > #" & Date() & "# )"

Aber natürlich, dass die Logik falsch ist-es zeigt Aktiv, aber abgelaufene Produkte.

Seltsam, wenn ich mich bewege die Bedingungen um, bricht es wieder:

rs.Filter = "End_Date = null OR Status = 1 AND End_Date > #" & Date() & "# "

stürzt mit der gleichen ADODB-Fehler.

Ich kann nicht scheinen, um vorauszusagen, was wird und wird nicht funktionieren, und die docs, die ich gelesen habe sind sehr lückenhaft auf die syntax erwartet (es ist nicht Reine T-SQL!), die Einschränkungen, etc. und alle die Beispiele, die ich gesehen habe, haben höchstens zwei Bedingungen. Ich glaube nicht, dass meine Bedingungen sind alle, die komplexe. Kann mir jemand sagen, ob das, was ich versuche zu tun, wird unterstützt, wenn es einen besseren Weg, es zu tun, oder zeigen Sie mir eine umfassende Dokumentation und Beispiele, die diese Art von Logik?

Dank!

InformationsquelleAutor Val | 2009-10-02
Schreibe einen Kommentar