FoxPro/Visual FoxPro - Filtrados Multiples con Where Select

 
Vista:
sin imagen de perfil
Val: 48
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Jesus (105 intervenciones) el 18/08/2020 23:28:10
Buenas Tardes
Estimados Expertos
Espero me puedan ayudar con este código en donde necesito que se filtre segun los CheckBox que el usuario vaya eligiendo y se almacene en la variable Cadena y luego en Tabla TbGral solo este estos registros filrados segun estas condiciones de los CheckBox :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Cadena=''
If ThisForm.Cb_fecha.value=1
  Cadena=' where Fecha_Mues>=' +ALLT(ThisForm.Fecha1.Value) + " and Fecha_Mues<=" + ALLT(ThisForm.Fecha2.Value)
ENDIF
 
If ThisForm.Cb_nivel.value=1
  IF AT('where',cadena)>0 then
   cadena=Cadena+ ' and nivel="'+thisForm.nivel.value+'"'
  else
   cadena='where nivel="'+'"'+thisForm.nivel.value
  ENDIF
ENDIF
 
If ThisForm.cb_Veta.value=1
  IF AT('where',cadena)>0 then
   cadena=Cadena+ ' and Veta="'+thisForm.Veta.value+'"'
  else
   cadena='where veta="'+'"'+thisForm.Veta.value
  ENDIF
ENDIF
 
If ThisForm.cb_Labor.value=1
  IF AT('where',cadena)>0 then
   cadena=Cadena+ ' and Labor="'+thisForm.Labor.value+'"'
  else
   cadena='where Labor="'+'"'+thisForm.Labor.value
  ENDIF
ENDIF
 
If ThisForm.cb_Principal.value=1
  IF AT('where',cadena)>0 then
   cadena=Cadena+ ' and Estructura="'+"PRINCIPAL"+'"'
  else
   cadena='where Estructura="'+'"'+"PRINCIPAL"
  ENDIF
ENDIF
 
Cadena=' * From TbGral '+Cadena
Messagebox( Cadena2)


************************************************************************************************
pero solo filtra por el MES Y AÑO QUE DESEEN y no filtra segun los Checkbox q selecciona el usuario.


De ya como siempre muchas Gracias por tu tiempo y paciencia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Leonardo Daniel A.
Val: 1.063
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Leonardo Daniel A. (439 intervenciones) el 19/08/2020 06:41:01
que cadena te genera al final... siempre revisa lo que te genera, que no vaya a faltar alguna comilla, and, or, = etc.

y como le dices que te filtre ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Jesus (105 intervenciones) el 07/09/2020 07:47:01
Buenas Noches
Estimado Leonardo
Me Genera esta cadena
1
Select * From TbGral Where 1=1  AND Nivel=NV-4.1 AND Veta=CAIRA

y si me fije en las comilas y sigue filtrando 2 registros cuando en la Tabla solo hay uno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.380
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Fidel José (642 intervenciones) el 19/08/2020 23:01:31
Me parece más conveniente hacer un string con la cláusula Where, e independizar la interfaz de los datos antes de lanzar el SELECT.
Conviene también, para simplificar la lectura, utilizar CHR(34) en lugar de doble comilla y CHR(39) en lugar de comilla simple, salvo en caso como en [Estructura = "PRINCIPAL"] donde los corchetes pemiten utilizar las comillas dobles y simples sin problemas y ahí se pueden leer sin problemas.

Más o menos como lo que sigue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
LOCAL lcCursor,;
	ldDesde,;
	ldHasta,;
	lcNivel,;
	lcVeta,;
	lcLabor
 
 
lcCursor = SYS(2015)
ldDesde = ThisForm.Fecha1.Value	&& as Date
ldHasta = ThisForm.Fecha2.Value	&& as Date
lcNivel = thisform.Nivel1.Value && as Character
lcVeta = thisform.Veta.Value	&& as Character
lcLabor = thisform.Labor.Value	&& as Character
 
lcWhere = ""
 
If ThisForm.Cb_fecha.value=1
	lcWhere = m.lcWhere ;
		+ IIF(!EMPTY(m.lcWhere)," AND ","");
		+ [Fecha_Mues BETWEEN ldDesde AND ldHasta ]
ENDIF
If ThisForm.Cb_nivel.value=1
	lcWhere = m.lcWhere ;
		+ IIF(!EMPTY(m.lcWhere)," AND ","");
		+ [nivel = ] + CHR(34)+m.lcNivel+CHR(34)
ENDIF
If ThisForm.cb_Veta.value=1
	lcWhere = m.lcWhere ;
		+ IIF(!EMPTY(m.lcWhere)," AND ","");
		+ [VETA = ] + CHR(34) + m.lcVeta + CHR(34)
ENDIF
 
If ThisForm.cb_Labor.value=1
	lcWhere = m.lcWhere ;
		+ IIF(!EMPTY(m.lcWhere)," AND ","");
		+ [Labor = ] + CHR(34) + m.lcLabor + CHR(34)
ENDIF
 
If ThisForm.cb_Principal.value=1
	lcWhere = m.lcWhere ;
		+ IIF(!EMPTY(m.lcWhere)," AND ","");
		+ [Estructura = "PRINCIPAL"]
ENDIF
 
SELECT * ;
	FROM TBGRAL ;
	WHERE &lcWhere ;
	INTO CURSOR (m.lcCursor)

Este enunciado puede tener defectos, no solamente por errores de ortografía, sino por mala interpretación del tipo de datos que realmente estás manejando. Por ejemplo, no se si Fecha_Mues es un campo tipo Date o Character.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Jesus (105 intervenciones) el 07/09/2020 07:58:12
Muy Buenas Noches
Mi Estimado Fidel
He aplicado tu codigo que esta mejor diseñado que el mio pero me sigue
Mostrando 2 registros cuando en la Tabla solo hay uno en base al ejemplo que te detallo te adjunto la imagen de mi Formulario y la Tabla para q temgas una mejor Idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.380
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Fidel José (642 intervenciones) el 15/09/2020 23:09:59
Viendo solamente la imagen del formulario, hay varias fallas posibles.
Es recomendable la siguiente nomenclatura:

1
2
3
4
5
6
7
8
9
Objeto			Prefijo
--------------------------
commandbutton 	cmd_
commandgroup	cmg_
checkbox		chk_
textbox			txt_
editbox			edt_
combobox		cmb_
optiongroup		opt_

Para el caso del combobox, lo que corresponde usar es una de dos cosas:
a) Si tienes no tienes asignado un ControlSource lcVeta = thisform.cmb_Veta.DisplayValue
b) Si creas una propiedad en el formulario y la asignas como ControlSource
p.Ej., Thisform.cmb_Veta.ControlSource = "Thisform.MiVeta" sería: lcVeta = thisform.MiVeta

Cuando se busca una cadena de texto, puede ser necesario hacer un TRIM(), o un PADR() siguiendo el ancho del campo correspondiente.
lcValor = TRIM(thisform.txt_Valor)
Pero si el campo es de ancho fijo, puedo aumentar la precisión de la búsqueda con:
lcValor = PADR(thisform.txt_Valor , nAncho_Campo , CHR(32))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 48
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Jesus (105 intervenciones) el 16/10/2020 05:25:24
MIl Gracias Fidel me fue util
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel
Val: 707
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Abel (280 intervenciones) el 19/08/2020 23:25:15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Cadena=''
If ThisForm.Cb_fecha.value=1
&& consideré que fecha_mues es un campo date.
  Cadena="between(Fecha_Mues,ctod("'+ALLT(ThisForm.Fecha1.Value) +"'),ctod('"+ ALLT(ThisForm.Fecha2.Value))+"')"
ENDIF
 
If ThisForm.Cb_nivel.value=1
   cadena=cadena+iif(empty(cadena),""," and ")+"nivel="+thisForm.nivel.value
ENDIF
 
If ThisForm.cb_Veta.value=1
   cadena=cadena+iif(empty(cadena),""," and ")+"veta="+thisForm.Veta.value
ENDIF
 
If ThisForm.cb_Labor.value=1
   cadena=cadena+iif(empty(cadena),""," and ")+"Labor="+thisForm.Labor.value
ENDIF
 
If ThisForm.cb_Principal.value=1
   cadena=cadena+iif(empty(cadena),""," and ")+"Estructura='PRINCIPAL'"
ENDIF
 
Cadena=" * From TbGral Where "+Cadena
Messagebox( Cadena)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 48
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Jesus (105 intervenciones) el 07/09/2020 08:04:01
Buenas Noches
Estimado Abel
primero muchas Gracias por tiempo al igual que todo los Expertos que se han dado su tiempo en contestame e igual probe sus codigos en el Formulario que tengo proble,as pero me sigue Mostrando 2 registros cuando en la Tabla solo hay uno en base tal como te detalo en ejemplo. Te adjunto la imagen de mi Formulario y la Tabla para q tengas una mejor Idea y me puedas tambien apoyar por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Jesus (105 intervenciones) el 16/10/2020 05:27:15
Gracias Abel por tu tiempo este between es muy bueno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel
Val: 707
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Filtrados Multiples con Where Select

Publicado por Abel (280 intervenciones) el 16/10/2020 16:34:40
Hola Jesús; me alegro que te haya sido de utilidad; y me doy cuenta que no te he dado respuesta a la consulta anterior, pero es que no la he visto sino hasta ahora.
Te dejo mi correo por cualquier duda.
abelrdc.sa gmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar