Проблемы с фильтром записей

У меня проблемы с фильтром набора записей ADO в устаревшем коде ASP Classic, и я пытаюсь понять, не поддерживается ли то, что я пытаюсь сделать, или я просто делаю это неправильно.

У меня есть набор записей элементов, и они имеют статус 1 (активный) или 0 (неактивный) и необязательный End_Date. В моем административном пользовательском интерфейсе у меня есть элемент управления, чтобы показать все элементы или только те, которые должны отображаться для конечных пользователей:Status = 1 AND ( End_Date is null OR End_Date > Date() )

Чтобы реализовать эту логику, я попытался:

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

но я получаю

ADODB.Recordset (0x800A0BB9)
Unknown runtime error

После долгих раздумий кажется, что ADO не нравится группировка символов вокруг условий End_Date в сочетании с условием AND. Если я возьму парены, это работает:

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

Но это просто случайность - похоже, условия фильтра оцениваются по порядку, и поэтому я получаю желаемые результаты. Если я поменяю И на ИЛИ, паренсы сработают:

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

Но, конечно, эта логика неверна - она показывает активные, но просроченные элементы.

Странно, если я перенесу условия, это снова сломается:

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

вылетает с той же ошибкой ADODB.

Я не могу предсказать, что будет и не будет работать, и документы, которые я прочитал, очень схематично в отношении ожидаемого синтаксиса (это не чистый T-SQL!), Ограничений и т. Д. И всех примеров, которые я ' У нас было не более двух условий. Я не думаю, что мои условия настолько сложны. Может кто-нибудь сказать мне, если то, что я пытаюсь сделать, поддерживается, если есть лучший способ сделать это, или указать мне всеобъемлющие документы и образцы, которые соответствуют этой логике?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос