Quiero hacer un formulario en el que emdiante campos independientes establezco los criterios de filtrado para un informe. Necesito que algunos campos puedan quedar en blanco (o con un valor por defecto) Lo he intentado y solo me he desesperado
Yo uso una pequeñas funciones que he creado. sql_and(c1,c2) Devuelve la condición logicia de encadenar c1 y c2, teniendo en cuenta que c1 o c2 pueden ser vacíos. Sql_clausula(cCampo, cValor, cTipo, cOperando) Que me construye una clausula SQL. Luego construyo mi filtro así: cSql="" if not isNull(me.fecha.value) then cSql = sql_clausula("FECHA_PEDIDO",me.fecha_value,"f",">=") end if if not isNull(me.poblacion.value) then cSql = sql_and( cSql, slq_clausula ("POBLACION_CLIENTE",me.poblacion.value,"C" ) end if ..etc if cSql<>"" then 'ahora lanzamos el informe. docmd.openReport "INFORME",,cSql else docmd.openReport "INFORME" end if ------------------ Tambien se puede filtrar el propio formulario poniendo if cSql<>"" then me.filter= cSql me.filterOn = true else me.filterOn = false end if Te adjunto el código de sql_and y sql_clausula que es muy sencillo. Pegalo en un nuevo modulo ------------------------------ Function sql_and(op1, op2) If IsNull(op1) Or op1 = "" Then sql_and = op2 ElseIf IsNull(op2) Or op2 = "" Then sql_and = op1 Else sql_and = op1 & " and " & op2 End If End Function Function sql_clausula(ByVal uQue, ByVal cCampo, ByVal cTipo, Optional ByVal cOperando) Dim nLast If IsMissing(cOperando) Then cOperando = "=" End If sql_clausula = "" Select Case UCase(cTipo) Case "*" If Not IsNull(uQue) Then If uQue <> "" Then nLast = Len(uQue) If Mid(uQue, nLast, 1) = "*" Then uQue = Left(uQue, nLast - 1) If nLast = 1 Then Exit Function End If If Left(uQue, 1) = "*" Then If nLast = 1 Then Exit Function sql_clausula = "(instr(" & cCampo & ",'" & Mid(uQue, 2) & "')<> 0)" Else sql_clausula = "(instr(" & cCampo & ",'" & uQue & "')=1)" End If End If End If Case "C", "CHAR" If Not IsNull(uQue) Then sql_clausula = "(" & cCampo & cOperando & "'" & uQue & "')" End If Case "N", "INT" If Not IsNull(uQue) Then sql_clausula = "(" & cCampo & cOperando & uQue & ")" End If Case "F", "FECHA" If Not IsNull(uQue) Then sql_clausula = "(" & cCampo & cOperando & "#" & Format(uQue, "mm/dd/yyyy") & "#)" End If Case "B", "BOOLEAN" If Not IsNull(uQue) Then sql_clausula = "(" & cCampo & cOperando & uQue & ")" End If End Select End Function