FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour oDolphin:Seek( ) QUERY PAGINADO
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
oDolphin:Seek( ) QUERY PAGINADO
Posted: Fri Aug 02, 2013 09:27 PM
Estimado Daniel y colegas..

como buscar, en un qry. PAGINADO con medio millón de registros ?

Code (fw): Select all Collapse
cQry += " FROM clientes order by codigo LIMIT 1000"
oCte := ::oCon:Query( cQry )
oCte:SetPages( 1000 )
lSeek := .f.
for I := 1 to oCte:nMaxPages
         oCte:GoToPage( i )
         IF oCte:seek( cstr( nClave ), "CODIGO" ) > 0
            lSeek := .t.
            exit
         endif
next 

if !lSeek
   ? "no existe el cliente ..."
endit


se puede hacer de otra forma?
o quizás modificar el METHOD SEEK de dolphin ?

saludos..
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: oDolphin:Seek( ) QUERY PAGINADO
Posted: Sat Aug 03, 2013 03:50 AM

Hola

no es posible, el seek solo funciona sobre al consulta activa, si tienes activa una paginacion la busqueda se hace por la la cantidad de registros de que contenga la pagina

Posts: 46
Joined: Tue May 07, 2013 07:27 PM
Re: oDolphin:Seek( ) QUERY PAGINADO
Posted: Sat Aug 03, 2013 03:57 PM

Lo que puedes hacer, es pedir al usuario una parte del nombre a buscar y realizar una consulta por esa parte, eso te va a traer solamente los registros que lo contengan puedes hacerlo al principio, al final o en cualquier parte del dato acortas muchos las consultas cuando trabajas con tablas con gran cantidad de registros, yo lo utilizo para trabajar en modo remoto y realmente anda muy bien.

Mira seria así

solo los registros que coincidan al principio
cQry += " FROM clientes where "nombrecampo" like "dato%'

solo los registro que coincidan al final
cQry += " FROM clientes where "nombrecampo" like "%dato'

solo los registro que contengan parte del dato
cQry += " FROM clientes where "nombrecampo" like "%dato%'

Es importante validar que el dato no este vacio sino te va a traer toda la tabla

Saludos

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: oDolphin:Seek( ) QUERY PAGINADO
Posted: Mon Aug 05, 2013 02:24 AM

Héctor gracias por tu sugerencia,
en mi caso solo quiero buscar un registro, con un campo numérico:

oQry:Seek( cstr( nCodigo ), "CODIGO" )

la tabla solo tiene un registro con ese código,

con tu estrategia como seria?

saludos. gracias.

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 46
Joined: Tue May 07, 2013 07:27 PM
Re: oDolphin:Seek( ) QUERY PAGINADO
Posted: Mon Aug 05, 2013 11:58 PM

Cesar

Sería de la siguiente manera

Oqry (es la conexión al servidor)

if empty(ncodigo)
return .f.
endif

Resul:=Oqry:query('select field, field from nom_base where codigo like '+ " '%" +alltrm(str( nCodigo ))+" %' " )

if Resul:lastrec() = 0
Resul:end()
Msginfo('No existe ninguna coincidencia",' Sin coincidencia')
return .f.
endif

if Resul:lastrec() = 1

aquí tienes la coincidencia exacta
haces lo que necesitas

Resul:end()
return .t.

else

Aquí tienes los datos que coinciden con el enviado esto lo puedes mostrar como quieras para que el usuario seleccione.
Yo normalmente lo muestro en una dbf con los campos indexados que necesito y lo muestro en un xbrowse con autosort para darte una idea con una coincidencia de 1000 datos tarda entre 1 y 2 segundos en mostrarte los datos, hablamos de todo el proceso, es muy rápido.

endif

Espero que te sirva

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: oDolphin:Seek( ) QUERY PAGINADO
Posted: Tue Aug 06, 2013 03:05 PM

Hector, excelente explicacion,
lo voy a llevar acabo
gracias.
saludos.

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "

Continue the discussion