FoxPro/Visual FoxPro - Ayuda con el comando buscar con textbox y con el botón agregar de un grid a otro grid.

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 12 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda con el comando buscar con textbox y con el botón agregar de un grid a otro grid.

Publicado por alfredo (2 intervenciones) el 21/05/2019 08:00:11
Tengo un formulario el cual tiene 2 tablas 1 que es la base de datos de mi programa y otra para visualizar los datos que seleccione de mi tabla 1
mi grid 1 se llama BASED
mi grid 2 se llama BASED2

Que comando puedo usar para buscar en grid1 el campo Nombres con un textbox, para al presionar una letra me especifique los datos completos del campo Nombres, y solo me muestre la fila buscada.

Otra duda es para mi botón agregar, quiero seleccionar solo una fila de mi grid1, y que al presionar agregar se inserte solo la fila seleccionada al grid2.
Captura
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda con el comando buscar con textbox y con el botón agregar de un grid a otro grid.

Publicado por Fidel José (657 intervenciones) el 22/05/2019 01:08:32
Cada control grid está asociado a una tabla dbf o a un cursor. Cualquier información debe ser buscada en el cursor asociado, no dentro del control grid.
Por lo tanto, los comandos de búsqueda son los usuales para cualquier tabla o cursor: LOCATE, SEEK() (para campos indexados) o SELECT - SQL. También se puede utilizar SCAN con alguna condición.
Si quieres que un texbox reaccione ante el ingreso de un caracter, debes utilizar el método KeyPress del textbox, para alojar el código.

No dices cuales son los cursores asociados a ambos grids.
Acá supongo que creas dos cursores iguales a partir de una tabla. El primero se rellenaría con los datos de la búsqueda y el segundo, en su caso, con el botón aceptar.

Por ejemplo, tengo una tabla llamada clientes, donde hay un campo llamado Nombre.
1) creo un cursor llamado curclien, sin datos
SELECT * FROM CLIENTES WHERE .F. INTO CURSOR CURCLIEN READWRITE
2) Asocio ese cursor al control grid Based
Thisform.Based.RecordSource = "curClien"

2) En el textbox de búsqueda de nombres pongo el siguiente código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LPARAMETERS nKeyCode, nShiftAltCtrl     && esta línea ya está en el código base. En este caso no utilizaremos los parámetros.
LOCAL lcString
lcString = UPPER(ALLTRIM(this.Text))
IF LEN(m.lcString) > 2
	lcString = CHR(34)+CHR(37)+UPPER(ALLTRIM(this.Text))+CHR(37)+CHR(34)
	IF USED("curClien")
		SELECT curClien
		ZAP
	ENDIF
	SELECT * FROM clientes WHERE nombre like &lcString INTO CURSOR curClien READWRITE
	IF !EMPTY(_tally)
		SELECT curClien
		THISFORM.BASED.REFRESH
	ENDIF
ENDIF



Para agregar una fila de un cursor a otro cursor donde coinciden uno o más nombres de campos, lo mejor es usar SCATTER NAME

* Botón Aceptar.Click()
loScat = NEWOBJECT("Empty")

SELECT (thisform.based.RecordSource)
SCATTER NAME loScat

INSERT INTO (thisform.Based2.RecordSource) FROM NAME loScat
thisform.based2.refresh

loScat = null

Probablemente quieras saber antes si esa línea ya fué incluida. Para eso tendrás algún identificador único.
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
sin imagen de perfil
Val: 4
Ha aumentado su posición en 12 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda con el comando buscar con textbox y con el botón agregar de un grid a otro grid.

Publicado por alfredo (2 intervenciones) el 24/05/2019 15:05:24
gracias por responder puedo buscar con este comando en grid1 el campo Nombres con un textbox "Pero solo busca la primera letra del nombre mas no el segundo nombre o sus apellidos" por ejemplo el nombre juan hay 50 juanes . me saldrá los 50 pero yo quiero buscar con una letra y se acomode la búsqueda si son 50 nombres iguales diferenciarlos tal vez por la inicial de sus segundos nombres o la inicial de sus apellidos .. pero con el comando que te muestro solo puedo hacer la búsqueda del primer nombre "ojala y puedas volver a ayudarme" ... y gracias por el segundo comando que me mandaste si funciono para solo seleccionar una sola fila.GRACIAS

SELECT BASED
thisform.text8.Value=UPPER(thisform.text8.value)
thisform.text8.Value=alltrim(thisform.text8.value)
SET ORDER TO NOMBRES && NOMBRES
SEEK ALLTRIM(thisform.text8.Value)
IF FOUND()
SET FILTER TO Nombres = thisform.text8.Value
ELSE
ENDIF
this.SelStart=LEN(this.Value)
thisform.Refresh
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