Busqueda en grilla (simple)

607 views
Skip to first unread message

Juan Pablo Carrasco M.

unread,
Oct 14, 2013, 5:15:38 PM10/14/13
to publice...@googlegroups.com
Estimados,

Una vez mas por acá en busca de vuestros excelentes consejos.

Tengo una grilla con 'n' registros y 'n' columnas, la idea es pinchar, despleglar una ventana con un textbox, ingresar el dato, lo busca en vfp o mysql, y listo, si se encuentra se posiciona el la linea y si no, avisa.

Espero que como siempre me puedan ayudar.. Muchas gracias.

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Oct 14, 2013, 5:55:40 PM10/14/13
to publice...@googlegroups.com
Hola visita mi blog, tengo una grilla que hace justo lo que necesitas



Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)

Jose Mario

unread,
Oct 14, 2013, 6:29:27 PM10/14/13
to publice...@googlegroups.com

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 9:20:54 AM10/15/13
to publice...@googlegroups.com
Estimados,

Si es perfecto, pero necesito algo simple de implementar, osea:

- Una tecla funcion que active
- Una pantalla donde ingresar la variable a buscar
- Encontro:
        Si; posicionarme en la celda
        No; "no se encuentra"

Tienen algo asi, simple y sin filtros

Gracias

Fernando D. Bozzo

unread,
Oct 15, 2013, 9:46:01 AM10/15/13
to publice...@googlegroups.com
Hola Juan Pablo:

¿Y si es tan simple no es mejor si lo programás como lo necesitás? Digo, porque puede ser un poco difícil encontrar exactamente lo que querés, y realmente no cuesta tanto hacerlo.

Saludos.-

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 9:54:35 AM10/15/13
to publice...@googlegroups.com
Fernando,

Si lo estoy haciendo, pero mi problema es posicionarme dentro de la grilla.

Alguna vez hice algo parecido en 2.6, pero usando arrays, osea dividia mi resultado por las por las columnas de mi dimension y obtenia mi resultado, pero ubicandome en la grilla nunca, es ahi mi problema.

¿Tienes algo al respecto?

Gracias

Fidel Charny

unread,
Oct 15, 2013, 10:07:49 AM10/15/13
to publice...@googlegroups.com
Juan Pablo
Al principio dijiste que ponías una pantalla (supongo que será un formulario) donde buscas algo en Vfp (supongo que en una o más tablas) o en MySql. Con esto, supongo, traes un cursor con datos que asocias a un control grid. Este cursor podrá tener uno o más registros (o ninguno).
Ahora, por lo que dices luego, parece que quieres buscar en un cursor ya asociado al control grid.
Algo así como 
Select (tuCursor)
locate for tuCampo=tuBusqueda
if found()
       thisform.grilla.refresh
       thisform.grilla.setfocus
endif
Todavía no entiendo el problema. Quieres apuntar a columnas que no se están visualizando? 

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 10:21:42 AM10/15/13
to publice...@googlegroups.com
Fidel,

Ya hice mi formulario de busqueda:

- En un el textbox se digita el dato a buscar.
- Al pinchar el boton "Buscar", se realizar una qry mysql para ver si el dato existe en la tabla.
- En caso de encontrar el dato (segun tu ejemplo):

if found()
       thisform.grilla.refresh   (refresca la grilla)
       thisform.grilla.setfocus (posiciono el cursor en el primer registro que tal vez no sea el que busque)
endif

La idea es posicionar el cursor dentro de la grilla, justo en la fila donde esta el datos

Esto ultimo es lo que no logro realizar, ¿me entiendes ahora?

Gracias

Fidel Charny

unread,
Oct 15, 2013, 10:43:06 AM10/15/13
to publice...@googlegroups.com
Si conoces exactamente cual es el dato, me quedan algunas opciones:
1) por qué vienen más datos que el buscado en la consulta?
2) Tal vez la consulta se basa en un tópico distinto, pero en los registros que trae se encuentra alguno buscado, tendrás que efectuar una nueva búsqueda dentro del cursor generado y recién ahí pones Thisform.grilla.refresh, thisform.grilla.setfocus. 
3) Tal vez se trata de una consulta relativa. Por ejemplo, traigo todos los "PEREZ" de un registro de clientes. Y cómo sabría Don Grilla que estás buscando a "PEREZ DAMIAN", por ejemplo?. 

De ahí que no alcanzo a entender: "justo en la fila donde está el dato...", pero qué dato?. 
Nota: el ejemplo del If Found() (que corresponde a LOCATE) es sobre el cursor generado y al punto 2) de este mensaje.

Miguel Canchas

unread,
Oct 15, 2013, 10:49:54 AM10/15/13
to publice...@googlegroups.com

No se rompan las bolas, lo que pide no esta claro…

 

Donde haces la búsqueda en la tabla o en el cursor.. Vas a devolver mas de un dato o solo es uno; si son varios justifica el uso de un grid..de lo contrario no…

 

Si te trae uno o varios registros y aun si insistes en usar el grid

 

Thisform.grid1.recordsource = “”

Hago mi query en el servidor

Thisform.grid1.recordsource = “mi_query”

Tengas resultados o no…

*** si lo que estas haciendo es buscar en el query usa solo un locate….

 

 

MK

Fer

unread,
Oct 15, 2013, 10:49:35 AM10/15/13
to publice...@googlegroups.com

Juan, ¿por casualidad hablas de hacer un setfocus en el grid? Eso te posicionaría en el grid.

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 10:59:35 AM10/15/13
to publice...@googlegroups.com
Haber:

Tengo los siguientes elementos dentro del form "Personas":

- Una grilla con datos de personas: dni (codigo unico identificatorio), nombre, direccion, sexo
- Un boton "Buscar"

Al pinchar el boton "Buscar", se activa el form "Buscar dni" con los siguientes elementos:
- Textbox para digitar el DNI a buscar (format: 99999999)
- Boton "Ok" que activara la busqueda de lo ingresado en el textbox

Al pinchar el boton "Ok", en caso de encontrar el dato ingresado de tipo unico, el cursor debe posicionarse JUSTO EN LA LINEA de la grilla donde este el dato encontrado.

¿Me entinde ahora?, se trata de un dato unico e irrepetible.

 Gracias

Miguel Canchas

unread,
Oct 15, 2013, 11:06:28 AM10/15/13
to publice...@googlegroups.com

Basta con un locate…

Locate for dni = minumero

Thisform.release

 

 

MK

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Juan Pablo Carrasco M.
Enviado el: martes, 15 de octubre de 2013 10:00 a.m.
Para: publice...@googlegroups.com
Asunto: [vfp] Re: Busqueda en grilla (simple)

 

Haber:

Fer

unread,
Oct 15, 2013, 11:05:32 AM10/15/13
to publice...@googlegroups.com

Juan, yo te entendí, pero creo que vos a mí no :-)

Sí posicionás el puntero de registro de la tabla o cursor que uses en el grid (con seek o locate) y le hacés un refresh y un setfocus, se debería ubicar y visualizar perfectamente.

¿Ahora si me entendiste?  XD

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 11:06:30 AM10/15/13
to publice...@googlegroups.com
Si, posicionar el PUNTERO o cursor, JUSTO EN LA LINEA donde esta el dato encontrado.

Osea si mi puntero esta en la linea 1, columna 1, salte a la linea 1873, columna 1, que es la ubicacion donde esta el dato

Fer

unread,
Oct 15, 2013, 11:08:20 AM10/15/13
to publice...@googlegroups.com

Exacto, ¿y ya probaste lo que te puse?

Fidel Charny

unread,
Oct 15, 2013, 11:09:47 AM10/15/13
to publice...@googlegroups.com
Entonces, ya tienes un cursor con varias personas con dni que está asociado a tu grilla.
Bien, también tienes la respuesta: LOCATE for dni=numero ingresado, if found(), thisform.grilla.refresh, thisform.grilla.setfocus.
Lo único, reserva el número de record actual, para volverte en el caso de que no encuentre el dni buscado, porque Locate te dejará en EOF().

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 11:23:34 AM10/15/13
to publice...@googlegroups.com
Ok, pruebo y les comento
Gracias

HernanCano

unread,
Oct 15, 2013, 2:05:04 PM10/15/13
to publice...@googlegroups.com
Fidel te propuso algo; tú  dijiste lo sgte:


if found()
       thisform.grilla.refresh   (refresca la grilla)
       thisform.grilla.setfocus (posiciono el cursor en el primer registro que tal vez no sea el que busque)
endif

¿Y después hiciste dos comentarios más sin probar?

Tip:
Con ThisForm.Grilla.SetFocus posicionas el puntero en el grid en el registro respectivo.

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 2:38:00 PM10/15/13
to publice...@googlegroups.com
Estimados,

Creo que he pecado de apresurado.

SI FIDEL, eso era lo que queria y tal y como lo dijo y luego lo corrobora HERNANCANO, era lo que yo queria.

Muchas gracias, y para la proxima pruebo y luego pregunto.

Sorry

Fernando D. Bozzo

unread,
Oct 15, 2013, 3:14:54 PM10/15/13
to publice...@googlegroups.com
El locate, el refresh y el setfocus es lo que te había comentado hace 4 horas, pero parece que si no se pone el ejemplo con código para copiar y pegar no se entiende :-/

Juan Pablo Carrasco M.

unread,
Oct 15, 2013, 4:17:45 PM10/15/13
to publice...@googlegroups.com
Fernando,

Si tienes razon, usted me envio la solucion hace bastante rato, lo malo es que no la aplique en su momento e insisti en algo que en un principio no comprendi.

Muchas gracias por sus sabios consejos
Reply all
Reply to author
Forward
0 new messages