FoxPro/Visual FoxPro - Creacion de consulta por nombre

   
Vista:

Creacion de consulta por nombre

Publicado por Zuko bezuko7@hotmail.com (10 intervenciones) el 12/10/2012 18:52:14
Por favor si me pueden ayudar. Tengo que crear un formulario para consulta por nombre de cargo por ejemplo.
En mi formulario tengo el Text1 y una grilla, al escribir el nombre en el text el puntero se debe mover en la grilla. Mi tabla esta en Postgres con llave primaria cod_cargo, y lo cargo en el formulario a traves de un metodo
LOCAL ok
conexion()
SQLEXEC(conexion,"select * from cargo order by nom_cargo","cargo")
thisform.grid1.RecordSource="cargo"
SQLDISCONNECT(0)

En el procedimiento InteractiveChange del text tengo el siguiente codigo
set exact off
seek alltrim(this.value)
if found()
thisform.lockscreen = .T.
thisform.grid1.refres
thisform.grid1.setfocus
this.setfocus
thisform.lockscreen = .F.
else
muestra un mensaje que no se encuentra

De esta manera me da error que no tiene indice y si cambio seek por locate me dice que no existe por mas que este lo que escribo
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

Creacion de consulta por nombre

Publicado por Fidel (321 intervenciones) el 13/10/2012 01:08:21
1) Mueve tu código al Evento Valid del TextBox (recuerda que ahí no puedes poner SetFocus)
En el evento InteractiveChange te bucará por cada letra que escribas.
2) No uses Thisform.lockScreen en la búsqueda. No hay nada que cambie de lugar. Esta propiedad se utiliza cuando uno debe realizar cambios importantes en la distribución de objetos y no quiere que se vea el movimiento.

Seek(), Indexseek() funcionan si indexas tu cursor por el campo correspodiente
select cargo
index on nom_cargo tag iNomCargo
* luego podrás escribir
if !empty(this.value)
if Indexseek(alltrim(this.value),.f.,"CARGO","INOMCARGO") && busca sin mover el puntero
INDEXSEEK(alltrim(this.value),.T.,"CARGO","INOMCARGO") && mueve el puntero.
THISFORM.GRILLA.REFRESH
ELSE
Messagebox("No se encuentra...")
This.value=""
return 0
endif

ENDIF

* Evento LostFocus
if !empty(this.Value)
Thisform.GRilla.SetFocus
endif

Con Locate (no necesitas indexado)
*Evento Valid
if !empty(this.value)
SELECT CARGO
lnRec=Recno()
locate for trim(nom_cargo) = alltrim(this.value)
if !FOUND()
Messagebox("No se encuentra...")
this.value=""
&& al fallar LOCATE, el puntero va a EOF(), por lo que hay que reposicionarlo.
if lnRec#0
go LnRec
endif
return 0
endif
endif

* Evento LostFocus
if !empty(this.Value)
Thisform.GRilla.SetFocus
endif
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

Creacion de consulta por nombre

Publicado por Zuko (10 intervenciones) el 13/10/2012 05:46:54
Gracias Fidel, ya probe y funciona. Tu explicación fue muy clara, gracias x ayudar a los novatos o principiantes
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