FoxPro/Visual FoxPro - Busqueda...

   
Vista:

Busqueda...

Publicado por Zaknafein (28 intervenciones) el 26/04/2008 18:59:16
Hola a todos... estoy realizando una busqueda por descripcion de producto... asi

local lc, lnrecno
select 1
lc = upper(ALLT(this.value))
lnrecno = recno()
if nombredearticulo >= lc
if not bof()
skip -1
endif
if nombredearticulo < lc
if lnrecno <= recc()
go recno()
else
go bott
endif
return
endif
if not empty (order())
seek lc
else
go top
locate rest for nombredearticulo= lc while nombredearticulo<= lc nooptimize
endif
else
locate rest for nombredearticulo= lc while nombredearticulo<= lc nooptimize
endif
if lnrecno # recno()
thisform.grid1.setfocus
thisform.textbox1.setfocus
endif
return
thisform.refresh()

lo unico malo es que la tabla tiene mas de 20mil productos y con el locate la busqueda es muy muy lenta, la busqueda por codigo de articulo la ago con "seek" y la hace en un segundo pero la de descripcion tarda demasiado y se que es por el locate por que antes hacia la de codigo con locate for y era igual de lenta, mas cambie a seek con indices y funciona bien pero no se como hacerlo para la busqueda por descripcion, por que pongo seek y no funciona por que es un "locate res for" ni si quiera se que es ese "res" solo se que me funcionaba de maravilla cuando lo probe con la tabla en la misma pc pero cuando es por la red que acceso a la tabla dutra una eternidad... espero que me puedan ayudar, enseñarme otro metodo de bsucarlo mas rapido o cambiar mi metodo y usar listbox o algoq ue se pueda hacer de otra forma... muchas 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

RE:Busqueda...

Publicado por kong (681 intervenciones) el 26/04/2008 19:41:21
Al parecer tienes un TextBox y un Grid, y quieres que el Grid muestre datos con el registro igual al TextBox. Cierto?
..............
Mi amigo no te compliques tanto......
Tenga el campo "nombrearticulo" indexado.

SET ORDER TO nombrearticulo
SEEK ALLTRIM(UPPER(this.value))
IF NOT FOUND()
GO TOP
ENDIF
thisform.grid1.refresh
NODEFAULT
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

RE:Busqueda...

Publicado por jose camilo (688 intervenciones) el 26/04/2008 22:15:28
en una tabla puedes tener tantos indeces como quieras
lo unico es k precefiblementes usa los cdx y no los idx y asi puedes darles Seek al campo k kieras
le da un modify structure y le dice k el articulo es indezado la descripcion tambien
ahora si kieres buscar por articulo

use MItabla order 1
seek MIArticulo

si por detalle
use MItabla order 2
seek MIDETAlle

lo del gid lo menejas tu
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:Busqueda...

Publicado por Plinio (7771 intervenciones) el 27/04/2008 04:44:52
Si tienes el campo res indexado y pones SET OPTIMIZE ON en tu programa principal, veras que aumenta la velocidad de acceso. (Tecnologia Rushmore)
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

Gracias, Pero...

Publicado por Zaknafein (28 intervenciones) el 28/04/2008 19:18:08
Hola a todos muchas gracias amigos... kong, gracias por el codigo de bsuqueda pero es que no me explique bien, no solo tengoq eu ahcer la busqueda por descripcion, necesito que sea como la estoy haciendo pero mas rapida, me explico: necesitoq ue al introducir datos me valla filtrando a las que coincidan con esos datos que se insertan por que los usuarios no saben el nombre exacto de todos los productos... como lo tengo funciona bien pero es """Extremadamente lento"""" por que incluye "LOCATE FOR" y eso es secuencial linea por linea y tarde demasiado en encontrar los datos que no estan al principio de la tabla... te recuerdo que tengo + de 18mil registros... espero por sus nuevas respuesta, muchas gracias, una ves vi un codigo que hacia un filtrado en un list box pero no recuerdo bien si usaba "locate for" o no... estamos en contacto,

PD: no pude postear el fin de semana por que estube fuera de mi casa =P
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:Gracias, Pero...

Publicado por kong (681 intervenciones) el 28/04/2008 21:52:50
sera este?
http://www.lawebdelprogramador.com/news/mostrar_new.php?id=34&texto=FoxPro/Visual+FoxPro&n1=490815&n2=1&n3=1&n4=1&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0
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:Gracias, Pero...

Publicado por kong (681 intervenciones) el 28/04/2008 22:00:06
FUNCTION F_CONDICIONBUSQUEDA
PARAMETERS nombrecampo,frase
frase=" "+UPPER(ALLTRIM(frase))+" "
CuentaPalabras=OCCURS(" ",frase)-1
condicion=".F."
IF LEN(ALLTRIM(frase))>0
FOR a=1 TO CuentaPalabras
palabra=UPPER(STREXTRACT(frase," "," ",a))
IF LEN(ALLTRIM(palabra))>0
IF a>1
condicion=condicion+" AND "+"'"+palabra+"'"+"$UPPER("+nombreCampo+")"
ELSE
condicion="'"+palabra+"'"+"$UPPER("+nombreCampo+")"
ENDIF
ENDIF
ENDFOR
condicion="("+condicion+")"
ENDIF
RETURN condicion
...............................................
O este?
Esta tomado de mi programa, espero que te sirva alguno.
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:Gracias, pero...

Publicado por neo (1601 intervenciones) el 28/04/2008 23:41:19
Pregunta: podrias explicarnos si "nombredearticulo" es de tipo caracter o numerico?

y que tipo de busqueda intentas realizar incremental??

Saludos
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:Gracias, pero...

Publicado por Zaknafein (28 intervenciones) el 29/04/2008 15:19:39
estoy intentando hacer una busqueda por descripcion, es de tipo character... y la idea es que me filtre en un list con el "requery" o en un grid los registros cullo campo concidan con loq ue voy escribiendo en el textbox o donde sea...

muchas gracias kong voy a ponerme a ver esos codigos y a ver si me son utiles luego te aviso... si me explicas un poco que hace el tuyo y como funciona te lo agradezco tengo muy poco tiempo programando en foxpro... y no conozco mucho los comandos el F1 es elq ue me salva =P jejeje....
muchas gracias por su ayuda amigos... y espero que puedan ayudarme un poco mas para hacer esa busqueda y filtrado sin el locvate for que es muy lento... gracias...
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...

Publicado por Zaknafein (28 intervenciones) el 29/04/2008 16:32:40
el del listbox y el requery no me funciona ademas que se pone full lento tambien y nisiquiera hace la busqueda creoq eu loq ue ralentiza el sistema es el requery en este caso, y el segundo no lo entiendo.... nisiquiera veo doden realizas la busqueda ni filtrado ni nada ='( lo que necesito es algo que pueda suplantar mi metodo de busqueda que usa locate for... si alguien sabe espero su ayuda... muchas gracias de antemano mi gente de lwp...
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:Ayuda...

Publicado por enrique (1041 intervenciones) el 29/04/2008 18:52:10
La coincidencia o filtrado tiene que ser desde el principio del campo o en cualquier parte del campo?
Cuantas tablas tienes en esta busqueda, como estan indexadas cada una y si son indices IDX o CDX.

respondeme esto y vere que puedo hacer.
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:Ayuda...

Publicado por kong (681 intervenciones) el 29/04/2008 19:36:53
Hola. .....
Disculpa que en el de la funcion no habia sido claro......
Lo que pasa que es una funcion que toma un grupo de palabras escritas en una linea y lo transforma para ser usada en mi busqueda..Asi

condicion=F_CONDICIONBUSQUEDA("CampoArticulos",this.value)

y luego ejecuto el SELECT sql con esa condicion. asi:

SELECT * FROM mitabla WHERE &condicion INTO CURSOR micursor

..................
estare atento mi amigo...
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:Ayuda...

Publicado por Zaknafein (28 intervenciones) el 02/05/2008 15:16:24
hola a todos... el tipo de indice es .IDX... se crea con esa extencion... en el load del form tengo para crearlo( tengo otro igual para el codigo producto pero ese si funciona bien y rapido):

delete files "nombreindice.*
index on "nombrearticulo" to "nombreindice"
set index to "nombreindice"

uso solo 1 tabla que tiene mucha informacion pero lo que uso de la tabla es nombrearticulo, codigoarticulo, precio.

PD: Pase como dos dias sin escribir por que tube unas dificultades por aqui y estaba resolviendo unas cosas... muchas gracias por su ayuda amigos espero que puedan ayudarme a hacer ese filtrado y busqueda... de verdad lo necesito...

para Enrique: no necesariamente tiene que ser .IDX ni nada... si sabes como realizarlo de otra manera solo dimelo y lo implemento, ten en cuenta que la tabla no la puedo modificar por que de ella se alimentan como 3 programas diferentes...

Para mi amigo Kong: sigo sin entender tu codiogo ='( jejeje... es que soy nuevo programando en foxpro y quisiera aprender... pero por lo pronto lo que mas quiero es terminar este sistema que ya deberia estar listo... y estoy retrasado con esto... solo necesito hacer la busqueda con insercion de unas letras del nombrearticulo ya mi sistema lo hacia pero es muy lento...

Espero por su ayuda muchas gracias de antemano...
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