Problemy z filtrem Recordset

Mam problem z filtrem w zestawie rekordów ADO w starszym kodzie ASP Classic i staram się zrozumieć, czy to, co próbuję zrobić, nie jest obsługiwane lub czy robię to źle.

Mam zestaw rekordów przedmiotów i mają one status 1 (aktywny) lub 0 (nieaktywny) i opcjonalną datę końcową. W moim administracyjnym interfejsie użytkownika mam kontrolę pokazywania wszystkich elementów lub tylko tych, które powinny być wyświetlane użytkownikom końcowym:Status = 1 AND ( End_Date is null OR End_Date > Date() )

Aby wdrożyć tę logikę, spróbowałem:

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

ale dostaję

ADODB.Recordset (0x800A0BB9)
Unknown runtime error

Po wielu oszustwach wydaje się, że ADO nie lubi grupowania parens wokół warunków End_Date w połączeniu z warunkiem AND. Jeśli wyjmę parenów, to działa:

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

Ale to tylko przypadek - wygląda na to, że warunki filtrowania są oceniane w porządku, więc otrzymuję pożądane wyniki. Jeśli zmienię AND na OR, praca parens:

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

Ale oczywiście ta logika jest błędna - pokazuje Aktywne, ale wygasłe przedmioty.

O dziwo, jeśli przesunę warunki, to znów się załamuje:

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

zawiesza się przy tym samym błędzie ADODB.

Nie mogę przewidzieć, co będzie i nie zadziała, a dokumenty, które przeczytałem, są bardzo szkicowe na temat oczekiwanej składni (to nie jest czysty T-SQL!), Ograniczeń itp. I wszystkich przykładów I ' widziałem mieć co najwyżej dwa warunki. Nie sądzę, żeby moje warunki były tak skomplikowane. Czy ktoś może mi powiedzieć, czy to, co próbuję zrobić, jest obsługiwane, czy jest lepszy sposób na zrobienie tego lub wskazanie kompleksowych dokumentów i próbek pasujących do tego rodzaju logiki?

Dzięki!

questionAnswers(4)

yourAnswerToTheQuestion