FoxPro/Visual FoxPro - consulta a travez de un grid

   
Vista:

consulta a travez de un grid

Publicado por abolom (31 intervenciones) el 11/11/2013 23:55:26
necesito ayuda para hacer una consulta a travez de un grid, tengo 2 tablas libres 1).- donde tengo datos unicos y la segunda puede contener varios datos que hace referencia al primero, lo hago la consulta en browse, lo hago de esta manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
datobuscar="PRUEBA"
 
select 1
use tabla 1 index indice1
 
SEEK(DATOBUSCAR)
IF FOUND()
  sele 2
  use tabla 2 index indice 2
    SET FILTER TO CLAVE=DATOBUSCAR
     GO TOP
    BROW
ELSE
RETURN
ENDIF

pero esto lo quiero hacer atrevez grid en form, pero al poner use tabla, se pone en blanco el grid
y No muestra la consulta

espero que alguien me puede ayudar, gracias de antemano.
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

consulta a travez de un grid

Publicado por Fidel José (558 intervenciones) el 12/11/2013 01:20:13
Supongo que tus tablas tienen indices estructurales compactos.
Supongamos que DatoBuscar ("Prueba") corresponde a un campo de la tabla2 llamado "CODIGO"
1) Olvídate de Select 1, Select 2, etc
2) Consulta la ayuda de las funciones Seek() e Indexseek() (recomendada)
3) Abre las tablas que vas a utilizar antes.
4) Evita utilizar SET FILTER. Eso funciona bastante bien en mono usuario y con tablas alojadas en tu equipo. En una red local, con tablas más o menos grandes, el funcionamiento es muy malo.
En su lugar, estudia SELECT SQL, que es una de las sentencias más potentes de Visual Fox. Su uso te prepara además para cualquier lenguaje SQL.

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
* load del form
use Tabla1 IN 0 SHARED
USE TABLA2 IN 0 SHARED
 
* Init del formulario
thisform.grid1.recordSource=""
 
* Unload del form
if USED("TABLA1")
       SELECT ("TABLA1")
       USE
ENDIF
IF USED("TABLA2")
       SELECT "TABLA2")
      USE
ENDIF
IF USED("MICURSOR")
       SELECT "MICURSOR"
       USE
ENDIF
 
 
 
* Botón de busqueda (Commandbutton.Click)
* Supuestamente se ingresa el valor a través de un TextBox
Thisform.grid1.RecordSource=""       && deja el grid en blanco.
datobuscar=alltrim(thisform.text1.Value)
* Puede ser:
* datoBuscar=Upper(alltrim(thisform.Text1.Value))
if empty(datobuscar)
       return
endif
if !indexseek(datobuscar, .F., "TABLA1","INDICE1")
      Messagebox("No existe &datoBuscar en Tabla1")
      RETURN
endif
IF !INDEXSEEK(datobuscar,.F.,"TABLA2","INDICE2")
     Messagebox("No existe &datoBuscar en Tabla2")
     RETURN
ENDIF
 
SELECT * FROM TABLA2 WHERE TRIM(CODIGO)==DATOBUSCAR INTO CURSOR MiCursor
&& esto también puede ser:
&& Select *,REcno() as Registro FROM Tabla2 WHERE TRIM(CODIGO)==DATOBUSCAR ;
&&   INTO CURSOR MICURSOR
&& Te trae el número de registro de la tabla original con el cual puedes efectuar cambios.
 
&& _TALLY es una variable de Visual Fox que te dice cuántos registros se procesaron en la consulta
 
if _Tally=0
      Messagebox("Nada para mostrar")
      RETURN
ENDIF
THISFORM.GRID1.RECORDSOURCE="miCursor"
THSIFORM.GRID1.REFRESH  && Puede que no sea necesario
THISFORM.GRID1.SETFOCUS
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