Formulario filtro

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

1 respuesta

Respuesta
1
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas