FoxPro/Visual FoxPro - Ayuda con visual foxpro 9

   
Vista:

Ayuda con visual foxpro 9

Publicado por adolfo adolfo_sofa@hotmail.com (5 intervenciones) el 16/07/2013 01:41:00
Buenas

necesito de su sabia ayuda amigos

Situación:
Tengo un proyecto en visual foxpro 9 en el cual tengo una base de datos llamada PROYECTO y una tabla llamada INSTI , tengo 2 FORMULARIOS uno llamado BUSCAR y otro llamado AGREGAR, en el fomulario buscar tengo solo 2 label y dox textbox y un grid, tengo un boton buscar el cual no tengo el codigo lo que necesito es el codigo para hacer funcionar ese boton, quiero que cuando le de click en el boton busque todo lo que se le parezca en el campo NOMBRE de la tabla INSTI y en un grid que esta abajo de esa tabla se ponga todos los que encontro junto con sus demas campos de registro.
y otro boton que me de oportunidad de modificar y guardar los campos en el grid y en la tabla.

Yo soy nuevo en esto de fox pro y si me pudieran ayudar se los agradeceria bastante. con el codigo de ejemplo o algo asi por que la verdad no le entiendo bien.

De antemano Muchas Gracias
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

Ayuda con visual foxpro 9

Publicado por Fidel (558 intervenciones) el 16/07/2013 02:33:11
Puedes intentar con:
1
2
3
4
5
6
7
8
9
10
11
lcnombre=alltrim(thisform.text1.value)
 
SELECT * FROM INSTI WHERE NOMBRE LIKE "%&lcNombre%" into cursor misnombres
if _TALLY=0
        MESSAGEBOX("Nada parecido a &lcnombre")
        select pepe
        use
        return
endif
 
thisform.grid1.recordsource='misnombres'


Por ejemplo, si lcNombre="JORGE", te traerá todos los JORGE que tenga el archivo, pero también las JORGELINA y similares que puedan existir (BOJORGE, TJORGE, etc)
Si quieres evitar los BOJORGE, la cláusula LIKE "&lcnombre%". Esto te traerá las JORGELINAS.

Estudia SELECT SQL desde el principio. REspeta estrictamente la sintaxis porque en eso va la velocidad con que se ejecute.

En tablas nativas de Visual Fox, puedes apelar al número de registro para las actualizaciones.
SELECT *,RECNO() AS TB_REC FROM INSTI WHERE NOMBRE LIKE "%&lcnombre%" into cursor misnombres
* Acá puedes editar un registro en el cursor "misnombres" y cambiarle algo y lo puedes guardar en la tabla original:
select misnombres
scatter MEMVAR
nroReg=tb_rec
select INSTI
GO nroREg
gather MEMVAR
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

Ayuda con visual foxpro 9

Publicado por adolfo adolfo_sofa@hotmail.com (5 intervenciones) el 16/07/2013 19:16:30
Te comento mi estimado

que para buscar algo el código quedo así:

lcnombre=alltrim(thisform.text1.value)

SELECT * FROM INSTI WHERE NOMBRE LIKE "%&lcNombre%"
if _TALLY=0
MESSAGEBOX("Nada parecido a &lcnombre")

return
endif

Si pongo algo en el text1 y se que no esta en la tabla INSTI me abre la tabla INSTI sin ningún resultado, y cuando cierro la tabla me dice que no lo encontró, y cuando pongo algo que se que esta en la tabla me abre la tabla con los datos pertenecientes a, eso me gusta.

Si me pudieras ayudar a modificar el código algo así como que si no encuentra nada no abra la tabla y solo diga nada parecido a &lcnombre como ya esta pero que no abra la tabla, por cierto borre el grid ya que no lo necesite siendo que abre directo la tabla, y no puedo modificarla, y te pido una disculpa me siento mal pidiendo todo esto, si puedes ayudarme gracias y si no, te entiendo.
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

Ayuda con visual foxpro 9

Publicado por Fidel (558 intervenciones) el 17/07/2013 01:28:30
1) Ah, perdón, pero el cursor lo tienes que generar con la cláusula READWRITE para que sea modificable. De lo contrario es solo lectura.

2) No sé a qué te refieres con abrir la tabla. Si te refieres al cursor (en el ejemplo "MisNombres"), pues SELECT SQL siempre abre el cursor, aunque no tenga registros. Eso es interesante porque te permite replicar la estructura de una tabla sin tener que hacer COPY STRUCTURE o cosas similares. SELECT * FROM INSTI WHERE .F. INTO CURSOR mcReplica READWRITE, genera un cursor con idéntica estructura a la de la tabla, sin registros.
Como el cursor se genera, cuando no tiene registros, lo cierro. La variable del sistema _Tally te dice cuántos registros se procesaron en la respuesta de SQL. Cuando no hay registros, tiene el valor _Tally=0. También puedes hacer:
select MisNombres
go top
if Eof()
Messagebox("NO hay registros")
use && cierro el cursor
endif

3) Ten presente que, en realidad, los cursores ni se abren, ni se cierran. Se crean y se eliminan, porque son elementos de memoria. Para generar un cursor manualmente, usas CREATE CURSOR Nombre_Cursor ("Campo1" c(20) ... ) && igual que una tabla. Fijate que no tienen localización (path) porque son elementos de memoria. Los cursores creados de esta forma no necesitan READWRITE. Lógicamente son lectura escritura. De otra forma serían absolutamente inútiles.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Thisform.Grid1.RecordSource=""      && pone en blanco el Control Grid
lcnombre=alltrim(thisform.text1.value)
LcBuscar=[%]+lcnombre+[%]
SELECT *,RECNO() AS tB_REC ;
	 FROM INSTI ;
         WHERE NOMBRE LIKE lcBusca ;
	 into cursor misnombres READWRITE
 
if _TALLY=0
        MESSAGEBOX("Nada parecido a &lcnombre")
        select MisNombres
        use
        return
endif
 
thisform.grid1.recordsource='misnombres'       && asocia el cursor al control Grid


Alternativamente, puedes utilizar una búsqueda previa (no es aconsejable en tablas con gran cantidad de registros).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
* Botón de búsqueda
thisform.grid1.RecordSource=""
 
lcNombre=UPPER(ALLTRIM(thisform.Text1.Value))
IF EMPTY(lcNombre)
	MESSAGEBOX("No ingresó nada para buscar")
	RETURN
ENDIF
lcBusca="*"+lcNombre+"*"
lcBusLike="%"+lcNombre+"%"
lnRes=0                           && usamos la variable para contar las ocurrencias.
SELECT INSTI
SCAN FOR LIKE(lcBusca,UPPER(nombre))     && Esta es la función LIKE(), no confundir
	lnRes=lnRes+1
ENDSCAN
 
IF lnRes#0
	SELECT *,RECNO() as tb_rec FROM INSTI ;
		WHERE UPPER(nombre) like lcBuslike ;
		INTO CURSOR misnombres READWRITE
 
	SELECT misnombres
	GO top
	Thisform.grid1.RecordSource="Misnombres"
ELSE
	MESSAGEBOX("Nada parecido a &lcNombre")
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