FoxPro/Visual FoxPro - Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

   
Vista:

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Tavo (8 intervenciones) el 17/03/2016 21:46:00
Tengo el problema que al llamar un formulario desde un botón de una toolbar al hacer un filtro de la información buscada, por ejemplo:
SET FILT TO AllT(ThisForm.cText.Value) $ MITABLA.DESCRIPCION,
El cual me hace un filtro de todos registros de mi tabla que coincidan o contengan con los caracteres que yo haya escrito en mi CUADRO DE TEXTO Y lo despliego en un POPUP para después escoger el renglon deseado; me marca el siguiente error:
"EL OBJETO THISFORM NO EXISTE"
Que otra opción tengo para no utilizar un set filter y no me marque ese error?
El error me marca al momento de llamar mi función donde despliego los datos en el popup
Agradezco de antemano sus aportaciones.
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

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por ANTONIO (16 intervenciones) el 17/03/2016 23:51:53
Buenas, Set filter te puede ayudar cuando tienes poca información si no el tiempo de espera se ira aguzando cada vez que tengas mas registros. Puedes crear un cursor con la orden select, el cual puedes realizar búsquedas por el campo que quieras y ordenar por donde quieras sin tener que tener índices.

Ejemplo:

select codigo, descripción, n1, n2 from tablaabuscar where AllT(ThisForm.cText.Value) $ MITABLA.DESCRIPCION into cursor tablanueva order by código asc

Este ejemplo crea una tabla temporal (cursor) con los campos código, descripción, n1 y n2 busca en la tabla tablaabuscar con la condición que tu has puesto arriba y ordena por código como podías haber puesto cualquier campo en este caso en ascendente.

luego en vez de mostrar la tabla mitabla lo que tienes q visualizar es la tabla tablanueva
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

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Luiz Alexandre (58 intervenciones) el 19/03/2016 13:09:30
O THISFORM só pode ser usado dentro do próprio form, por exemplo.

no Init do FORM.

THISFORM.txtChave.Value = 0

se o seu comando SET FILTER estiver dentro de um PRG, ou dentro de uma Classe, é preciso passar para a mesma o form como objeto.

DO MeuPRG WITH THISFORM

No MeuPRG, deve ter o seguinte comando,

LPARAMETERS loForm as Form

SET FILTER TO ALLTRIM(loForm.txtText.Value) $ MITABLA.DESCRIPCION

Sobre o comando ON KEY LABEL F9 THISFORM.PBORRARENG o mesmo não permite fazer referencia direta ao form, mas para resolver isso, existem duas formas. O PBORRARENG, preciso ser um método do form... :)

1a. Ao chamar o form, você indica que o mesmo tem um nome, DO FORM MeuForm NAME frmMeuForm LINKED,
ON KEY LABEL F9 frmMeuForm.PBORRARENG()

2a. Você cria um PRG com o seguinte comando.

1
2
3
FUNCTION MeuComando()
	Application.ActiveForm.PBORRARENG()
ENDFUNC

E o meu ON KEY ficaria assim
ON KEY LABEL F9 MeuComando()
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

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Tavo (8 intervenciones) el 24/03/2016 19:32:56
Te agradezco mucho, de hecho así hice un ejemplo y si me funcionó, gracias por tus comentarios
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

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Fidel José (321 intervenciones) el 18/03/2016 00:27:24
No uses SET FILTER. Sigue la recomendación de Antonio y estudia las instrucciones SELECT - SQL

De todos modos te comento sobre el error: Thisform es una referencia de objeto que solo puede utilizarse dentro de un form.

Podrías saltar el error de una forma nada recomendable:
PUBLIC oForm
oForm = thisform
SET FILTER TO ALLTRIM(oForm.cText.Value) $ MITABLA.DESCRIPCION

También recomiendo siempre escribir la sintaxis completa. El método abreviado solo sirve para volver enjundiosa la lectura.
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

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Tavo (8 intervenciones) el 18/03/2016 21:01:36
Ok, de hecho ya he utilizado la instrucción SELECT en ese tipo de casos, el problema que me he encontrado es que no trabajo directamente en la tabla y no visualizo en el POPUP la información que en ese momento se haya agregado o modificado, a menos que vuelva a crear el cursor, pero si me resuelve el problema del error.
Otro detalle que tengo es al asignar una acción a una tecla me marca el error antes comentado de que no existe el formulario, ejemplo:
ON KEY LABEL F9 THISFORM.PBORRARENG
Lo puedo resolver como me lo explicas generando una variable publica, pero no entiendo por que dices que es POCO RECOMENDABLE?
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 Eduardo Ureña

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Eduardo Ureña (78 intervenciones) el 19/03/2016 02:22:20
La forma más rápida es usar el seek para buscar la info que coincida, luego hacer un ciclo mientras la condición se cumple y llenar un cursor o archivo temporal.

Cuando hay mucha info es lo más eficiente. Ni el set filter ni el Select se le comparan Requiere un poquito más de código pero el efecto para el usuario es muy sensible.
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

Otra opción diferente al uso de SET FILTER TO para búsqueda de datos en una tabla

Publicado por Tavo (8 intervenciones) el 24/03/2016 19:27:16
De hecho si es como dices, el resultado de la búsqueda es mucho mas rápido, creo que voy a implementarlo como dices, muchas gracias.
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