FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Buscando registro rápidamente
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Buscando registro rápidamente
Posted: Thu Oct 23, 2008 11:49 AM

Compañeros (otra vez yo...)

Tengo un DBF con más de 150.000 registros. Uno de los campos es IMPRESO , L , 1 . ¿ Como puedo buscar rápidamente el primer registro de la BD que IMPRESO=.t. ? Algo así como utilizar SEEK o FIND para buscar de una tacada. Lo puedo hacer con LOCATE pero se ralentiza el sistema.

Mil gracias.
LORENZO

Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Buscando registro rápidamente
Posted: Thu Oct 23, 2008 12:16 PM

Loren..

Si no puedes crear un indice para ese campo o incluirlo en un indice existente y que no altere el orden de busqueda que deseas... puedes probar lo siguiente.

Compara el Locate con DBEVAL(), o con un ciclo DO WHILE, o con un SET FILTER y ve con cual de ellos obtienes mejor velocidad. Yo tengo mi opcion, pero es mejor que tu pruebes esas opciones.

Desde Chile
Adolfo

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Buscando registro rápidamente
Posted: Thu Oct 23, 2008 02:26 PM
Hola

prueba Asi

procedure p()
local ckey, ctag, ccdx
dbcreate( "paso", {{ "hola", "c", 10, 0 },;
						 { "logic", "l", 01,0 }}, "dbfcdx")

sele 0 ; use paso new exclusive via "dbfcdx"

cKey := 'iif( logic, "t", "f" )'
cTag := "lcampo"
cCdx := "paso"

INDEX ON  &cKey   ;
      TAG &cTag   ;
      TO  &cCdx

set index to (cCdx)

dbappend()
field->hola := "falso"

dbappend()
field->hola := "true"
field->logic:= .t.

dbcommitall()

wbrowse()

ordsetfocus( "lcampo" )
OrdScope( 0, "t" )
OrdScope( 1, "t" )
wbrowse()

OrdScope( 0, "f" )
OrdScope( 1, "f" )
wbrowse()

close all
return
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Buscando registro rápidamente
Posted: Thu Oct 23, 2008 04:01 PM

Loren,

Crea tu indice usando la funcion cVal2Char()

INDEX ON cVal2Char( campologico ) TO AZUL

Y listo, ya puedes usar el DbSeek()

Saludos

FWH 10.6 + xHarbour + Borland 582

Continue the discussion