Foros del Web » Programando para Internet » ASP Clásico »

Me ayudan con este algoritmo?

Estas en el tema de Me ayudan con este algoritmo? en el foro de ASP Clásico en Foros del Web. Que tal, aqui de nuevo molestandolos... Resulta que estoy haciendo una pagina de consulta y asi mostrar una vista de los datos que me serian ...
  #1 (permalink)  
Antiguo 08/09/2004, 18:11
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Me ayudan con este algoritmo?

Que tal, aqui de nuevo molestandolos...

Resulta que estoy haciendo una pagina de consulta y asi mostrar
una vista de los datos que me serian utiles ver.

Supongamos que tengo 3 campos de una tabla con esos 3 campos.
tengo un formulario que tiene 3 listbox

Cliente >> Ver todos
Tipo >> Ver todos
Color >> Ver todos

Cuando todos son "Ver todos" no hay problema solo es un
SELECT * FROM mitabla

pero cuando uno o dos o todos estan seleccionados pues empieza
el rollo de los AND y del WHERE....

alguien sabe un algoritmo para concatenarlos sin errores?
agradeceria mucho su ayuda ya que estoy bloqueado por completo...
  #2 (permalink)  
Antiguo 08/09/2004, 18:30
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Bueno mas o menos sería así:

var cliente, tipo, color
Si cliente <> "" AND tipo <> "" AND color <> "" Then
Buscas los tres campos
Fin Si

Si cliente <> "" AND tipo <> "" Then
Buscas en cliente y en tipo
Fin si

Si cliente <> "" AND color <> "" Then
Buscas en cliente y color
Fin Si

Si cliente <> "" Then
Buscas en cliente
Fin si

Si tipo <> "" AND color <> "" Then
Buscas en tipo y color
Fin si

Si tipo <> "" Then
Buscas en tipo
Fin Si

Si color <> "" Then
Buscas en color
Fin si

Creo que no se escapo ninguna...mas que vengan los tres vacios

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 08/09/2004, 18:42
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Gracias! algo asi si me habia ocurrido muy al principio, solo que cuando
me di cuenta que eran 8 campos, la combinacion creo aumenta

podria existir alguna otra manera?
  #4 (permalink)  
Antiguo 08/09/2004, 19:16
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Pues no se, pero se me ocurre una función que le pases como argumentos los 8 campos

Function DevuelveAND(itera, campo1, campo2, campo3, campo4, campo5, campo6, campo7, campo8)
esAND= false
For i = 2 to itera
If eval(campo & i) <> ""
esAND = true
Exit For
Next
DevuelveAND = esADN
End Function

Function(campo1, campo2, campo3, campo4, campo5, campo6, campo7, campo8)
strSQL = "SELECT campo FROM tabla WHERE "
If campo1 <> ""
mi_campo = "nombre_campo"
strSQL = strSQL & mi_campo & "=" & campo1
es_and = DevuelveAND(2, campo1, campo2, campo3, campo4, campo5, campo6, campo7, campo8)
If es_and Then
strSQL = strSQL & " AND "
End If
End If

If campo2 <> "" Then
mi_campo = "nombre_campo"
strSQL = strSQL & mi_campo & "=" & campo2
es_and = DevuelveAND(3, campo1, campo2, campo3, campo4, campo5, campo6, campo7, campo8)
If es_and Then
strSQL = strSQL & " AND "
End If
End If
.
.
.
.
.
'hasta 8
End Function

No se, demasiado redundante, pero podría funcionar... :-p


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 09/09/2004, 11:49
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Listo muchas gracias! me abriste el panorama, deveras...
aqui esta el codigo.

Lo que hace realmente es crear una sentecia SQL a partir de los campos
seleccionados en un formulario.
Cada campo del formulario debe llevar el nombre del campo en la tabla
para que la sentecia salga bien. Todavia no esta hecho para poner
las comillas, pero supongamos que todos los campos son numeros y
no deberia haber problemas

' -->> Bandera para saber si todos los campos son ">> TODOS"
lleno = 0
For Each x In Request.Form
if Request.Form(x) <> "" then lleno=1 end if
next

' -->> Si la seleccion es un SELECT ALL
if lleno = 0 then
SSQL = "SELECT * FROM dbo.tmovimiento ORDER BY idcliente DESC"

' -->> Si hay por lo menos 1 o mas campos especificados
else
' Cadena base
SSQL = "SELECT * FROM dbo.tmovimiento where "

ban=0
For Each x In Request.Form

' Solo se concatena si fue seleccionado
if request.Form(x) <> "" then

response.Write("ban = " & ban & "<br>") ' Para checar

' Concatena las AND
if ban <> 0 then SSQL = SSQL & " and " end if

SSQL = SSQL & x & "=" & request.Form(x)

response.Write(SSQL & "<br>") ' Para checar
ban = ban + 1
end if

next

SSQL = SSQL & " ORDER BY idcliente DESC"
end if

response.Write(SSQL)
  #6 (permalink)  
Antiguo 09/09/2004, 11:59
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98

Muy bien, a mi se me ocurrió hacerlo también siempre se necesita algo modular...ya te comentaré cuando lo tenga hecho.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:18.