FoxPro/Visual FoxPro - duda con seek?

   
Vista:

duda con seek?

Publicado por neo (1601 intervenciones) el 02/04/2008 01:41:37
Buen dia comunidad...

Estoy batallando con el comando Seek, un pregunta:

¿El Seek puede buscar coincidencias de datos o tiene que ser algo específico??

porque lo que quiero es que Seek me busque en una tabla todos los nombres que sean "JUAN".... ¿Se puede con Seek??

JOSE JUAN RAMIREZ
PEREZ ALVAREZ JUAN ROBERTO
JUAN DE DIOS ORTIZ
DE LA ROSA JUAN CARLOS

ETC...

Gracias...

Pd: Para consultar en red Seek es el unico que a cumplido con las expectativas ya que la tabla es de unos 28000 datos y se torna lenta con otras consultas, incluso con Select from

Saludos
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

RE:duda con seek?

Publicado por kong (681 intervenciones) el 02/04/2008 02:04:36
Que tal amigo.
Si es muy frecuente estas busquedas, talvez sea de utilidad separar los nombres en algunos campos. Indexarlos y luego hacer seek a cada campo.
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

RE:duda con seek?

Publicado por jose camilo (688 intervenciones) el 02/04/2008 03:36:02
con el seek eso k tu busca lo dudo se pueda hacer

lo k no entiendo es k en 2800 registro se haga pesado el select ...
kisas tu problema es k da select * from mitabla y eso si lo torna pesado te recomiendo usar algo como
-- Select nombre,direccion from mitabla where at("JUAN",Upper(Nombre)) > 0
si notas solo incluyo los campos necesarios en mi consulta no la tabla entera eso lo hace mas ligera
el where es un ejemplo tienes k hacerlo como va no tenia a fox en este equipo y no pude probar para enviarte la linea depurada
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

RE:duda con seek?

Publicado por CarlosA (86 intervenciones) el 02/04/2008 04:52:03
El seek no busca coincidencias como lo que pretendes.... con 28000 registros no se demora nada... lo mejor es tener un indice estructural cdx (tag) no idx sobre el campo nombre... y usar select asi

select nombre,direccion,telefono from mitabla where 'JUAN' $ nombre

lo importante es que exista un indice en el campo nombre para agilizar la busqueda... lo probe con 100.000 registros y va rapido...


otra cosa... si lo que quieres es recorrer los registros que contengan por ejemplo la palabra 'JUAN' para trabajar sobre ellos entonces haces lo siguiente

select mitabla
set order to nombre && este indice debe existir y es clave para que sea rapido
go top
locate for 'JUAN' $ nombre &&busca el primer registro que coincida
if found()
do while not eof()
aca colocas las instrucciones que quieras
continue && busca el siguiente registro que coincida
enddo
endif

este no lo probe pero debe funcionar...

suerte
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

RE:entonces Select no es lento??

Publicado por neo (1601 intervenciones) el 04/04/2008 01:28:40
Entonces esta sentencia no es lenta??:

select nombre,direccion,telefono from mitabla where 'JUAN' $ nombre

Porque me sería muy util...y lo pero es que lo he probado y se tarda como 5 0 6 segundos en encontrar la coincidencia...y la verdad me resulta una eternidad..

Cabe mencionar las caracteristicas y herramientas con las que cuento:

1.- El ejecutable local está en una pc de unos 256 mb P IV Windows xp (no es server).

2.- La conexion de la red es pr concentrador y cables de red (alambrico)

3.- Comparto la carpeta y hago un acceso directo del ejecutable
(Me gustaría me dijeran como hago para rastrear la carpeta datos (tablas) y asi no traerme todo sino que cada terminal tuviera un ejecutable.

Espero sugerencias amigos..

Nota: por lo pronto tuve que crear indices y usar el comando Seek y hacer un browse de la tabla, algo asi:

IF EMPTY(Thisform.a4.Value)
else

SET EXACT off
SELECT beneficiarios
SET ORDER TO nombre
PUBLIC f2
f2=ALLTRIM(Thisform.a4.Value)
STORE f2 TO busca
SEEK busca
IF FOUND()

BROWSE FIELDS num, ar, ref, nombre, direccion, fecha, folio, estatus, responsable, st FONT "tahoma",10 NODELETE NOEDIT NOLGRID
PUBLIC r1
r1=beneficiarios.num
Thisform.n1.Value=beneficiarios.num
Thisform.a5.value=beneficiarios.ar
Thisform.a6.Value=beneficiarios.ref
Thisform.a7.Value=beneficiarios.loc
Thisform.a8.Value=beneficiarios.nombre
Thisform.a9.Value=beneficiarios.direccion
Thisform.a10.Value=beneficiarios.colonia
Thisform.a11.Value=beneficiarios.fecha
Thisform.a1.Value=beneficiarios.fecha
Thisform.a12.Value=beneficiarios.st
Thisform.a13.Value=beneficiarios.estatus
Thisform.a14.value=beneficiarios.folio
Thisform.a15.Value=beneficiarios.observ
Thisform.a16.Value=beneficiarios.cve_elector

Thisform.a5.Enabled=.t.
Thisform.a6.Enabled=.t.
Thisform.a7.Enabled=.t.
Thisform.a8.Enabled=.t.
Thisform.a9.Enabled=.t.
Thisform.a10.Enabled=.t.
Thisform.a11.Enabled=.f.
Thisform.a12.Enabled=.t.
Thisform.a14.Enabled=.t.
Thisform.a15.Enabled=.t.
Thisform.a16.Enabled=.t.

Thisform.ccan.Enabled=.t.
Thisform.cguar.Enabled=.t.
Thisform.cnuev.Enabled=.f.
Thisform.csal.Enabled=.t.

Thisform.Refresh

ELSE
WAIT WINDOW "Beneficiario no encontrado" TIMEOUT .8
Thisform.a4.Value=""
RETURN 0
ENDIF
ENDIF

****Hasta ahora no está lenta, enfin, un saludo (Ya la tabla tiene 31000 registros)
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

RE:duda con seek?

Publicado por jorge (422 intervenciones) el 02/04/2008 17:48:18
Hola camaradas, buen dia
Si haces una busqueda manual es decir, utilizando un ciclo SCAN-ENDSCAN???
donde con una clausula FOR haces el equivalente???
se me ocurre...
Utilizar LOCATE y CONTINUE, tambien podria ser.
en ambos casos la conincidencia tendria que ser exacta, es decir, JUAN=JUAN
y no JUAN CARLOS <> JUAN

Select me ha funcionado correctamente y sin problemas..
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