Problemas con el filtro de conjunto de registros
Estoy teniendo problemas con un filtro en un conjunto de registros ADO en el código ASP clásico heredado, y estoy tratando de entender si lo que estoy tratando de hacer no es compatible o si lo estoy haciendo mal.
Tengo un conjunto de registros de elementos, y tienen un estado de 1 (activo) o 0 (inactivo), y una fecha de finalización opcional. En mi interfaz administrativa de usuario, tengo un control para mostrar todos los elementos o solo aquellos que deberían mostrarse a los usuarios finales:Status = 1 AND ( End_Date is null OR End_Date > Date() )
Para implementar esa lógica, intenté:
rs.Filter = "Status = 1 AND ( End_Date = null OR End_Date > #" & Date() & "# )"
pero me sale
ADODB.Recordset (0x800A0BB9)
Unknown runtime error
Después de muchas bromas, parece que a ADO no le gustan los grupos de agrupación en torno a las condiciones End_Date en combinación con la condición AND. Si saco los parens, esto funciona:
rs.Filter = "Status = 1 AND End_Date = null OR End_Date > #" & Date() & "#"
Pero eso es solo un accidente: parece que las condiciones del filtro se evalúan en orden, y así obtengo los resultados que deseo. Si cambio el AND a OR, los parens funcionan:
rs.Filter = "Status = 1 OR ( End_Date = null OR End_Date > #" & Date() & "# )"
Pero, por supuesto, esa lógica es incorrecta: muestra elementos activos pero caducados.
Curiosamente, si muevo las condiciones, se rompe de nuevo:
rs.Filter = "End_Date = null OR Status = 1 AND End_Date > #" & Date() & "# "
Se bloquea con el mismo error ADODB.
Parece que no puedo predecir lo que funcionará y lo que no funcionará, y los documentos que he leído son muy incompletos sobre la sintaxis esperada (¡no es T-SQL puro!), Las limitaciones, etc. y todos los ejemplos que menciono He visto tener a lo sumo dos condiciones. No creo que mis condiciones sean tan complejas. ¿Alguien puede decirme si se admite lo que estoy tratando de hacer, si hay una mejor manera de hacerlo o indicarme documentos y ejemplos completos que coincidan con este tipo de lógica?
¡Gracias!