FoxPro/Visual FoxPro - set filter no filtra en el ejecutable

 
Vista:

set filter no filtra en el ejecutable

Publicado por Ana María Fernández (8 intervenciones) el 24/09/2011 16:12:08
Hola. Tengo un form que muestra en un grid el resultado del siguiente filter:

miva=LEN(ALLTRIM(mdescri))
DO case
CASE EMPTY(mdescri1).and.empty(mano)
SET FILTER TO upper(left(T0012.des_ART,miva))=UPPER(mdescri).and.atcc(ALLTRIM(UPPER(mmodel)),UPPER(T0012.mod_ART))>0) IN T0012
CASE NOT EMPTY(mdescri1).and.empty(mano)
SET FILTER TO upper(left(T0012.des_ART,miva))=UPPER(mdescri).and.upper(ALLTRIM(mdescri1))$UPPER(T0012.des_ART).and.atcc(ALLTRIM(UPPER(mmodel)),UPPER(T0012.mod_ART))>0) IN T0012
CASE EMPTY(mdescri1).and.not empty(mano)
SET FILTER TO upper(left(T0012.des_ART,miva))=UPPER(mdescri).and.upper(ALLTRIM(mano))$UPPER(T0012.mod_ART).and.atcc(ALLTRIM(UPPER(mmodel)),UPPER(T0012.mod_ART))>0) IN T0012
CASE NOT EMPTY(mdescri1).and.not empty(mano)
SET FILTER TO upper(left(T0012.des_ART,miva))=UPPER(mdescri).and.upper(ALLTRIM(mdescri1))$UPPER(T0012.des_ART).and.upper(ALLTRIM(mano))$UPPER(T0012.mod_ART).and.atcc(ALLTRIM(UPPER(mmodel)),UPPER(T0012.mod_ART))>0) IN T0012
ENDcase
THISFORM.REFRESH

Es complicadito pero funciona muy bien. Permite una búsqueda eficiente en una tabla (T0012) con más de 20.000 registros de repuestos de automóviles con su descripción y modelo. El resultado es mostrado en un grid desde el cual, presionando en el número de artículo, es posible seleccionar un registro en particular y ver otros datos. PERO.... todo es muy hermoso mientras no lo incluya en el ejecutable. Desde el .exe, no selecciona ningún registro. Y es el filter, no el grid, porque para salir de la duda le puse un brow a la salida del CASE y no muestra ningún registro.
Tengo un problema similar con otro form que busca en otra tabla, de casi 90.000 registros, muy bien siempre y cuando no lo corra desde el ejecutable.
Se me ocurren formas de reemplazar estos forms, pero no me gustan tanto visualmente, el usuario ya está acostumbrado a usarlos así y no puedo creer que haya algo que no funcione por el sólo hecho de incluirlo en un ejecutable. Por otro lado, tengo que hacer el ejecutable para que puedan trabajar desde varias máquinas a la vez de manera realmente interactiva.
Agradezco desde ya su ayuda.

Ana María
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

set filter no filtra en el ejecutable

Publicado por Luis Horacio (93 intervenciones) el 27/09/2011 22:42:22
Buenas tardes,


Hay que revisar que s lo que necesitas y ver si el filtro que tienes es el correcto o realizarlo de otra forma.

Saludos!
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

set filter no filtra en el ejecutable

Publicado por Douglas (297 intervenciones) el 29/09/2011 03:11:28
Hola cuando yo empece programando usaba mucho set filter me acuerdo, pero no seria mejor que en el load de tu formulario hagas lo siguiente

Claro este es un ejemplo de hacer cursores actualizable, tu pon los campso que vas a llenar y regresar a la tabla o solo es para visualizar mejor.

He aqui los campos o nombres de campos de tu tablas de la cual vas a llenar.

create cursor tmp_Grid (codigo int, descrip c(100), cantidad n(11,2), precio n(11,2) , total n(11,2) )


para llenar la grid, hace mejor un select

vfecha = ctod('01/01/2011')

select 1* from tutabla where fecha <= vfecha into cursor tmpvista

claro en ves de select *, asterisco, pon tus campos que tiene que tener el mismo nombre de tu cursor y el mismo el mismo formato si es caracter caracter. ok o numerico.

select tmp_grid
zap &&&&& como es un cursor actualizable podes hacer zap sobre el si estas en red se genera solo en la estacion que ejecute el reporte o pantalla.
appen from dbf('tmpvista')
go top
thisform.grid1.refresh

escribes mas pero es mas seguro y multi usuario que set filter. ya que si tenes una tabla que todo la tiene en red, esto te va quitar optimizacion a tu app. set filter no se recomienda.


Saludes


Douglas Sánchez
Nicaragua
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

set filter no filtra en el ejecutable

Publicado por Ana María (8 intervenciones) el 29/09/2011 17:15:46
Gracias, voy a probar tu opción.
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

set filter no filtra en el ejecutable

Publicado por Ana María (8 intervenciones) el 30/09/2011 18:19:46
Muchas gracias. Lo pruebo y te aviso.
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

set filter no filtra en el ejecutable

Publicado por Ana María (8 intervenciones) el 29/09/2011 17:13:14
Me parece que no fui demasiado clara. El Set Filter se realiza en un formulario donde el operador ingresa parámetros (dos obligatorios y dos optativos) y, de acuerdo a esos parámetros, el filtro selecciona los registros de la tabla que debe mostrar y los exhibe en un grid. La tabla es de sólo lectura y, presionando en uno de los campos del grid, el operador puede elegir datos de uno de los registros seleccionados para pasar a otro formulario. Al no ser la búsqueda fija, no puedo poner el set filter en el load event y, usando cursores, no pude hacer que seleccione el registro que elige el operador.
Pero lo que más me interesa es que el formulario funciona perfectamente fuera del exe y lo vienen usando desde hace más de un año para consulta en mostrador y facturación de repuestos de automóviles. Hasta ahora, en lugar de ejecutable se corría un prg donde, de acuerdo a la clave del usuario, se ejecutaba un menú distinto. Lo único que hice fue crear un proyecto, poner todo adentro y generar un ejecutable. Y todos los demás programas funcionan como si no se hubieran enterado de que están en un proyecto. Sólo ése y otro similar que consulta una tabla más grande, me están dando problemas. O sea que el filter no está mal armado. Es en el ejecutable el problema.
Gracias a todos.
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

set filter no filtra en el ejecutable y select da error

Publicado por Ana María (8 intervenciones) el 03/10/2011 13:26:58
Hola. Decidí probar la opción del select into cursor que recomendaron Douglas y Mauricio. Dentro del CASE, reemplacé el filter por el select, pero da un error de keyword no reconocida que no puedo descubrir cuál es. He aquí una se las sentencias select:

CASE EMPTY(mdescri1).and.empty(mano)
SELECT des_art,mod_art,cod_art,preact_art,stact_art;
FROM t0012;
where upper(left(T0012.des_ART,miva))=UPPER(mdescri) AND atcc(ALLTRIM(UPPER(mmodel)),UPPER(T0012.mod_ART))>0);
INTO CURSOR tmp_mos
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

set filter no filtra en el ejecutable y select da error

Publicado por Tachito (25 intervenciones) el 12/10/2011 22:03:06
Hola..
tu tabla T0012 está dentro de una base de datos o es una tabla libre..? si está dentro de una BD pon de este modo tu SELECT o caso contrario te recomiendo que utilices vistas con parametro que es mucho mas practico y versatil.

CASE EMPTY(mdescri1).and.empty(mano)
SELECT des_art,mod_art,cod_art,preact_art,stact_art;
FROM BasedeDAtos!t0012;
where upper(left(T0012.des_ART,miva))=UPPER(mdescri) AND atcc(ALLTRIM(UPPER(mmodel)),UPPER(T0012.mod_ART))>0);
INTO CURSOR tmp_mos

FROM BasedeDatos!Tabla indica la tabla a que BD pertenece..

Saludos..
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

set filter no filtra en el ejecutable y select da error

Publicado por Carlos Cuyé (75 intervenciones) el 14/10/2011 22:28:32
Siempre asegurate de colocar un espacio en blanco delante (a la izq) del cada punto y coma.
Cada linea del comando, excepto la última, deben terminar con punto y coma.

En este código tenés errores de puntuación:
Varias lineas tienen el punto y coma "pegado" al contenido. Si la linea siguiente no comienza con un espacio en blanco y el comando lo requiere, el punto y coma de la linea anterior sin un blanco delante provoca un error de sintaxis.
Después de AND falta un punto y coma (con blanco delante).
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