No me selecciona el registro

Hola, fíjate que hice a como me dijiste, todo sale bien, pero al momento de seleccionar el registro e ir al form padre no me selecciona el registro el cual encontré

1 Respuesta

Respuesta
1
Para que el registro deseado te aparezca en el form padre, debes seleccionarlo en el grid del form de búsqueda (hijo).
1. Asegurate que el grid tenga establecidas las propiedades READONLY = .F. , ALLOWCELLSELECTION = .T. 
2. En el formulario "padre", coloca en el propiedad ACTIVATE un refresh!
THISFORM. Refresh
Nota: te pido mil disculpas por no habértelo dicho antes! Pase por alto decirte lo del refresh! Mil disculpas! Es una falla mía! :( :(
Explicación: Cuando generas la búsqueda interactiva (en el form hijo), el registro deseado se debe mostrar en el grid. Solo seleccionalo en el grid (haz click encima de la linea que contiene el registro que buscas) y luego cerra el form "hijo". Así debería funcionar, puesto al seleccionar en el grid, "empujas" el puntero en la tabla al registro deseado y al regreasr al form padre ocurre la propiedad ACTIVATE que contiene el refresh! Estoy seguro que no mostraba el registro en el form padre por que hacia falta redibujar el form con un refresh para que actualizara la posición del puntero y te mostrara el registro. Así si debe funcionar! Si no te funciona, avisame para que veamos como solucionarlo. Espero tu respuesta!
A tus ordenes!
Ravenn!  (n.n)!!!
Fíjate que todo funciona de maravilla, solo un pequeño inconveniente, cuando le doy cerrar al form hijo, (en el evento DblClick del grid le puse Thisform.Release) cuando se cierra va directamente al form Padre pero me da un error "unknown member Text1", que se refiere al textbox del padre hijo, intente solamente ejecutar el form hijo sin que fuera al padre, y no me sale este error, ¿qué podrá ser?
La solución es fácil! No te preocupes! (Que super que es fox.. ¿no te parece? :D )
Es un problema de variables! Nada que no se pueda resolver en cinco minutos. Para que comprendas bien como corregir el error, te voy a pedir que me escribas el código que utilizaste en el form de búsqueda (hhijo), en el método INTERACTIVECHANGE del text1 (el que te mostré en la conluta de "búsqueda dinámica""). Lo que hay que hacer es un reemplazo en la condición de búsqueda.. en el set filter a través de una variable! Es superrr sencillo... ya veras que es tan sencillo como... comer! Pásame el código y te lo voy a reestructurar para que te fijes como va la cosa y lo apliques. Te espero!!!
A tus ordenes!
Ravenn! :D :D :D
Claro que si fox es de maravilla, todo en un solo programa por eso me gusta más que los otros.
Ok. Lo que hice fue un combo para que allí se seleccione el tipo de búsqueda
y lo siguiente
DO CASE
<span style="white-space: pre;"> </span>CASE Thisform.combo1.Value = "Código"
<span style="white-space: pre;"> </span>Thisform.timer1.Enabled = .T.
<span style="white-space: pre;"> </span>Thisform.timer1.Reset
<span style="white-space: pre;"> </span>Thisform.Refresh
<span style="white-space: pre;"> </span>SET FILTER TO ALLTRIM(Thisform.txtABuscar.Value) $ STR(cliente.codcli)
<span style="white-space: pre;"> </span>Thisform.Refresh
<span style="white-space: pre;"> </span>CASE Thisform.combo1.Value = "Nombre"
<span style="white-space: pre;"> </span>Thisform.timer1.Enabled = .T.
<span style="white-space: pre;"> </span>Thisform.timer1.Reset
<span style="white-space: pre;"> </span>Thisform.Refresh
<span style="white-space: pre;"> </span>SET FILTER TO UPPER(ALLTRIM(Thisform.txtABuscar.Value)) $ <span style="white-space: pre;"> </span>UPPER(cliente.nomcli)
<span style="white-space: pre;"> </span>Thisform.Refresh
ENDCASE
Ok! Perfecto! Mira va así. Primero te pongo el código correcto y luego va la explicación! :D :D :D 
**--Generar busqueda dinamica--**
Local ncod, cnom
ncod = ALLTRIM(Thisform.txtABuscar.Value)
cnom = UPPER(ALLTRIM(Thisform.txtABuscar.Value)
DO CASE
            CASE Thisform.combo1.Value = "Código"    &&Si bucamos por codigo ncod&&
                   Thisform.timer1.Enabled = .T.
                   Thisform.timer1.Reset
                   Thisform.Refresh
                   SET FILTER TO ncod $ STR(cliente.codcli)
                   Thisform.Refresh
            CASE Thisform.combo1.Value = "Nombre"   &&Si buscamos por nombre cnom&&
                   Thisform.timer1.Enabled = .T.
                   Thisform.timer1.Reset
                   Thisform.Refresh
                   SET FILTER TO cnom $ (cliente.nomcli)
                   Thisform.Refresh
ENDCASE
******************************************
******************************************
Explicación: Primeramente fíjate que hemos declarado dos variables locales "ncod" y "cnom"! Ambas variables almacenan el valor del text de búsqueda. No obstante, ncod lo almacena teniendo en cuenta ALLTRIM (para código) y cnom UPPER(ALLTRIM para nombres. Luego, en la condición de cada filtro, en lugar de escribir o más bien.. en lugar de hacer referencia al control text y su valor, hacemos referencia a la variable (SET FILTER TO ncod... SET FILTER TO cnom)! Eso te corrige el error de "Unknown member txtbuscar "! Ves! Así de fácil! En pocas palabras... hacemos referencia al valor de una variable en el filtro en lugar de un control text!
Ahora... permíteme aconsejarte sobre el posible comportamiento que estoy seguro te dará el FORM padre, cuando cierres el hijo y te muestre el resultado. Cuando estableces un filtro (SET FILTER) los datos disponibles que podrás ver, serán UNICAMENTE AQUELLOS que cumplan con la condición del filtro. Es decir... si entre 10 registros que tienes en la tabla, buscas (en el form hijo) el que corresponda al código 112 (por ejemplo), al regresar al form padre, te mostrara el registro 112... pero unicamente podrás ver ese registro en tu form! Si intentas desplazarte hacia los demás registros, sea atrás o adelante, no podrás hacerlo...! El form como que se "enllavara" en ese registro! Y tendrás que salir del form y volver a entrar para tener todos los registros disponibles! Y eso es normal!
Si es tu caso y deseas dejarlo así.. pues es tu decisión! A veces se requieren ese tipo de "compormientos"! No obstante, si quieres poder seleccionar a través de la búsqueda, un registro que se te muestre en el form padre.. pero sin dejar pegado ese mismo registro en tu form (padre), lo que debes hacer es ir al form HIJO (donde haces la búsqueda) y en el RELEASE colocar:
SET FILTER TO
o bien... a como dijistes... si cierras el form dando doble click sobre el grid, entonces ve ahi, donde cerras el form y lo podes pone asi
SET FILTER TO
THISFORM. Release
Es lo mismo :D :D es solo para que veas las bondades de foxpro! Je je!
"Set filter to"escrito sin nada más, quita los filtros de las tablas y deja disponibles todos los registros nuevamente para poder desplazar el puntero! :D :D
Con esto, le quitas el filtro a la tabla antes de regresar al form padre y así tendrás todos los registros disponibles para que los desplaces a como querrás en tu form padre. Osea... podrras hacer la búsqueda, seleccionar, mostrar y tener todos los registros disponibles. Te digo esto para conocimiento general y para que veas como funciona una condición de filtro!
Si tienes algún problema con esto, avisame y te ayudo! Si no.. pues fue un placer! Cualquier cosa me avisas!
A tus ordenes!
Ravenn! :D :D :D
Ahora me sale que no encuenta la variable cnom o ncod
Pasa las variables a PUBLIC al inicio del codigo. En lugar de:
**--Generar busqueda dinamica--** 
Local ncod, cnom
Cambialo a: 
**--Generar busqueda dinamica--** 
PUBLIC ncod, cnom
:D :D :D
tsssss. Que bárbaro a como decimos aquí en Nicaragua, sos una bestia! (Refiriéndose a que eres todo un experto), espero que no te haya quitado al paciencia, y que estés siempre a la orden, porque tengo un sin números de inquietudes, pero por hoy te voy a dejar descansar, je je.
La verdad que he aprendido solamente viendo, no he estudiado nada de programación, pero me gusta todo esto de la programación, y fox lo veo más interesante, más rapido y casi todo esta a la mano, te agradezco mucho.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas