oDolphin:Seek( ) QUERY PAGINADO

oDolphin:Seek( ) QUERY PAGINADO

Postby sysctrl2 » Fri Aug 02, 2013 9:27 pm

Estimado Daniel y colegas..

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

Code: Select all  Expand view
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 "
User avatar
sysctrl2
 
Posts: 971
Joined: Mon Feb 05, 2007 7:15 pm

Re: oDolphin:Seek( ) QUERY PAGINADO

Postby Daniel Garcia-Gil » Sat Aug 03, 2013 3: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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: oDolphin:Seek( ) QUERY PAGINADO

Postby Hector Pedro Lerda » Sat Aug 03, 2013 3: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
User avatar
Hector Pedro Lerda
 
Posts: 46
Joined: Tue May 07, 2013 7:27 pm
Location: Buenos Aires - Argentina

Re: oDolphin:Seek( ) QUERY PAGINADO

Postby sysctrl2 » Mon Aug 05, 2013 2: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 "
User avatar
sysctrl2
 
Posts: 971
Joined: Mon Feb 05, 2007 7:15 pm

Re: oDolphin:Seek( ) QUERY PAGINADO

Postby Hector Pedro Lerda » 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
User avatar
Hector Pedro Lerda
 
Posts: 46
Joined: Tue May 07, 2013 7:27 pm
Location: Buenos Aires - Argentina

Re: oDolphin:Seek( ) QUERY PAGINADO

Postby sysctrl2 » Tue Aug 06, 2013 3:05 pm

Hector, excelente explicacion,
lo voy a llevar acabo
gracias.
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 971
Joined: Mon Feb 05, 2007 7:15 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 38 guests