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...
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


0