¿Como puedo hacer una consulta como esta?

27 views
Skip to first unread message

Alejandro Garcia G.

unread,
Jul 18, 2011, 10:45:36 AM7/18/11
to Comunidad de Visual Foxpro en Español
Un cordial saludos a todos, una vez mas recurro a sus invaluables
conocimientos en VFP ya que no logro idear una manera mas sencilla
para realizar lo que tengo en mente. Tratare de explicarme lo mejor
posible, si alguien desea ayudarme y tal vez no me comprenda bien
puede pedirme mas explicacion.

Deseo realizar una consulta de la forma mas breve posible ya que
actualmente hago lo mismo con una serie de validaciones que hacen
ineficiente mi programa. Tengo una tabla X con una serie de datos,
igualmente en un formulario, el usuario debe escoger o no una serie
de datos para "filtrar" los datos de la tabla y mostrar unicamente lo
que el usuario desea, el usuario puede o no escoger esos
"filtros" (los cuales son 6 para ser exactos), si no escoje ninguno,
pues el sistema me muestra la tabla completa en un informe, pero si el
usuiaro escoge uno, dos, tres, etc, el sisteme debe mostrar unicamente
los datos con el filtro o los filtros que el escogio. No hay orden de
escogencia puede ser cualquiera de los 6 filtros, y puede combinarlo a
su antojo. ¿Se podra realizar una consulta asi?

Lo que estoy haciendo en estos instantes es hago el select completo y
posterior mente por medio de un DO CASE voy borrando los registros por
medio de la variable que no este vacia, algo asi:

Select * from X into cursor A
Do case
case !empty(var1) and !empty(var2)
delete campo1#var1
delete campo2#var2

Y asi voy jugando con las variable e ir elimando, osea, que deben
imaginar que mi DO CASE es bastante largo.

Bueno, espero me hayan entendido y me puedan colaborar.

Gracias.

Allan Raúl Acuña

unread,
Jul 18, 2011, 11:04:06 AM7/18/11
to publice...@googlegroups.com
Saludos mi estimado colega,

En relación a las consultas parametrizadas yo las hago de esta manera:

Local lcCondicion as String
lcCondicion = ' !deleted() '

If Filtro1
   lcCondicion = lcCondicion + ' and MiTabla.campo1==Valor1 '
Endif

If Filtro2
   lcCondicion = lcCondicion + ' and MiTabla.campo2==Valor2 '
Endif

.
.
.

If FiltroN
   lcCondicion = lcCondicion + ' and MiTabla.campo2==Valor2 '
Endif

Acá vendria la consulta:

SELECT * FROM MiTabla Where &lcCondicion 

Intenta probar, 

Saludos desde Nicaragua

Lic. Allan R. Acuña
Desarrollador Independiente
msn= allan...@hotmail.com
skype= niceasysoft
+(505) 8 831 8191
www.NicEasySoft.com




> Date: Mon, 18 Jul 2011 07:45:36 -0700
> Subject: [vfp] ¿Como puedo hacer una consulta como esta?
> From: bitnet...@gmail.com
> To: publice...@googlegroups.com

Intel Man

unread,
Jul 18, 2011, 11:05:23 AM7/18/11
to publice...@googlegroups.com
Hola, yo lo resuelvo tu problema de esta manera:

condicion1=iif(empty(thisform.codigo_proveedor.value),".t.","compras.codigo_proveedor=thisform.codigo_proveedor.value")
condicion2=iif(thisform.opttipo.value=1,".t.","compras.tipo_doc=thisform.opttipo.value")
condicion3=iif(empty(thisform.fecha1.value),".t.","compras.fecha1=thisform.fecha1.value)

select * from compras;
          where &condicion1;
          and &condicion2;
         and &condicion3;
         into cursor temporal

Osea mi idea es primero armar las condiciones, si estan vacios los filtros entonces hace un ".t."  osea todos osea el fitro no se escogio, y asi voy armando los filtros que necesito, y en el select coloco todos los filtros que estos han sido comprobados antes.

Espero me entiendas.

Saludos.


> Date: Mon, 18 Jul 2011 07:45:36 -0700
> Subject: [vfp] ¿Como puedo hacer una consulta como esta?
> From: bitnet...@gmail.com
> To: publice...@googlegroups.com
>

Alejandro Garcia G.

unread,
Jul 18, 2011, 11:35:52 AM7/18/11
to Comunidad de Visual Foxpro en Español
Mil gracias por sus ideas, voy a tratar de implementar alguna de ellas
para ver cual me resulta mejor para aplicar, luego les contare como me
fue y si me es posible colocar el codigo.

Si alguien mas tiene alguna otra idea, bienvenida sea.

Saludos a todos y gracias.

Alejandro Garcia G.

unread,
Jul 18, 2011, 12:40:00 PM7/18/11
to Comunidad de Visual Foxpro en Español
Nuevamente yo, por encima he realizado unas pequeñas pruebas para ver
el resultado y el rendimiento del informe, es excelente lo que me
recomendaron, les dire, que hasta ahora esta dando los resultados
necesarios, en un rato realizo las pruebas oficiales con varios datos
y compararlos con lo anterior.

Lo que si les comento es que pase de una cantidad impresionante de
lineas de codigo a unas cuantas pocas...fantastico.

Gracias.

Jorge Carazzo

unread,
Jul 18, 2011, 3:48:01 PM7/18/11
to Comunidad de Visual Foxpro en Español
Mira, si bien lo que te voy a contar, yo lo aplico a consultas
enviadas a sql server, el principio es el mismo para fox.
Yo lo que hago es hago es declarar una cierta cantidad de variables,
una por filtro, como string, con valor vacio

Ejemplo:
filtro1=''
filtro2=''
filtro3=''

Luego, segun los filtros seleccionado, le doy el valor de filtro a
cada variable

Ejem: aplico filtro 1 y 3

filtro1=' and carreras.idcarrera=2 '
filtro3=' and socios.idsocio=4'

Luego, y esto es lo mas importante, la consulta la armo con el comando
TEXT ENDTEXT

Ejemplo de una consulta sobre alumnos

TEXT TO consulta TEXTMERGE NOSHOW PRETEXT 7
SELECT alumnos.legajo, socios.nombres, carreras.nombre as
carrera, socios.direccion, socios.dni,
socios.telefono, alumnos.idsocio, alumnos.idalumno,
carreras.idcarrera, socios.fotografia FROM alumnos
inner join socios on alumnos.idsocio=socios.idsocio
inner join carreras on alumnos.idcarrera=carreras.idcarrera
WHERE alumnos.activo=1 <<filtro1>> <<filtro2>> <<filtro3>>
order by nombres
ENDTEXT

La consulta se ejecuta con &consulta
De esta manera, las variables FILTRO que esten llenas, se concatenan y
las otras no.

Un cordial saludo.



On 18 jul, 11:45, "Alejandro Garcia G." <bitnetsoft...@gmail.com>
wrote:

Daniel Sánchez

unread,
Jul 18, 2011, 5:28:28 PM7/18/11
to publice...@googlegroups.com
En mi caso todas mis consultas son dinámicas y trabajo con una barra de filtro donde el usuario activa o adiciona los criterios según la información que desea recibir. Esta barra de filtro me devuelve un where con el criterio indicado.

image.png
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú
image.png

edgar suarez kummers

unread,
Jul 19, 2011, 9:04:30 AM7/19/11
to publice...@googlegroups.com
Buenas Daniel:

Algo similar a lo que tú haces en la búsqueda, pero sobre varias tablas y con varios filtros (sobre cada una de las tablas) y condiciones tanto .AND. como .OR. y las opciones >, <, <>, ==, que contenga, ....

Y que en caso de "error" no detenga la ejecución del programa ... que cree una tabla intermedia con los resultados y allí sí a exportarlos a los consabidos Excel, PDF, Word ...

Esto claro con el mouse CLICK ... inmediatamente recibirías una invitación de todos los grandes zoológicos del mundo para invitar y llevarse al "famoso" que es capaz de masturbar a los tigres y leones y además meneando la cola,.

Te felicito por tu sistema

Saludos

Edgar


De: Daniel Sánchez <resets...@gmail.com>
Para: publice...@googlegroups.com
Enviado: lunes 18 de julio de 2011 16:28
Asunto: Re: [vfp] Re: ¿Como puedo hacer una consulta como esta?
image.png

Walter R. Ojeda Valiente

unread,
Jul 19, 2011, 12:43:01 PM7/19/11
to publice...@googlegroups.com
Una barra de filtro, interesante idea.

Yo ponía las condiciones en forma vertical, pero ponerlas horizontalmente está muy bueno.

Saludos.

Walter.




Date: Mon, 18 Jul 2011 16:28:28 -0500
Subject: Re: [vfp] Re: ¿Como puedo hacer una consulta como esta?
From: resets...@gmail.com
To: publice...@googlegroups.com
image.png
Reply all
Reply to author
Forward
0 new messages