Página 1 de 1

Função ORDWILDSEEK()

Enviado: 21 Dez 2007 17:07
por Eolo
Esta vai pro meu amigo Leonardo Sygecom, o meu padrinho no XHarbour...

Bão, capaz de alguém já ter postado algo a respeito dessa função ORDWILDSEEK(), nem conferi. Mas, se já, que me perdoem. É que a coisa é boa, mesmo!

Dados: arquivo PRODUTOS.DBF com 15.664 registros, 21 campos, tamanho total de cada registro = 285, indexado via CDX, 7 tags, blablabla, rodando xHarbour console num AMD Athlon 1.5Ghz, 512 de RAM... Mandei procurar pelo substring "PESSEGO"...Resultado: em menos de 1 segundo, o achoice() com 138 ocorrências explodiu na tela...

Caraca! Como não migrei pro XHarbour antes????

Código: Selecionar todos

use produtos
set index to produtos
set orde to 1 // NOME do produto, caracter, tamanho 60
go top
priv lista:={}
?time() //-> início: 16:45:39
do while ordwildseek("*PESSEGO*",.t.)
  * procura produtos que contenham "PESSEGO" no nome, em qq posição,
  * do começo pro fim do arquivo = o argumento .T.
  * e adiciona esses nomes à matriz LISTA 
  aadd(lista,field->nnome)
endd
?time() //-> final: 16:45:39 PO, NUM DEU TEMPO DE MUDAR O RELÓGIO!...
wait len(lista) // -> 138
achoice(05,11,22,70,lista,.t.,,)
quit

Enviado: 21 Dez 2007 17:57
por alaminojunior
Pois é meu amigo. É o bicho !!! O código abaixo é de uma rotina de pesquisa parecida com a sua, porém em MySql com Mediator.
Em 0,33 segundos retornou + ou - 700 registros

Código: Selecionar todos

cr1:= "select clicod,clinom from cdcli000 where clinom like '%"
cr2:= "%' order by clinom"
local5:= seconds()
use (netname()) as cr1+rtrim(pesq_incr)+cr2 new scrollable overwrite
local6:= seconds()
if reccount() = 0
   RstEnv(Seek1)
   wvt_messagebox("Nao foi encontrado nenhum resultado.","ATENCAO",48)
   public env:= ((netname())->clinom)
   close (netname())
   select(Seek2)
   ordsetfocus("indcli02")      
   return nil
endif
nom = "C¢digo - RazÆo Social"
RstEnv(Seek1)
win(05,09,17,60,trim(str(reccount()))+;
iif(reccount() > 1," Cli. Encontrados"," Cli. Encontrado")+space(5)+str(local6-local5)+" Seg's","gr+/g","g/b")
iTb4:= tbcolumnnew(Nom, { || tran(clicod,"999999-9")+"  "+clinom })
iTb3:= TbrowseDB(06,10,16,59)
Quando vi quase caí da cadeira.
Fascinante. :-O :-O :-O

Enviado: 21 Dez 2007 18:23
por sygecom
Eolo, o mérito é todo seu....
Agora sobre o MYSQL parece piada mesmo...o negocio voooaaa baixo....

Enviado: 21 Dez 2007 18:45
por ederxc
alaminojunior escreveu:

Código: Selecionar todos

cr1:= "select clicod,clinom from cdcli000 where clinom like '%"
cr2:= "%' order by clinom"
Eolo ,é sobre isso que havia comentado com voce anteriormente .... ;)

Enviado: 21 Dez 2007 19:44
por Eolo
Po, "MySql com Mediator"?! É mais um da série Allien vs Predator? eh eh eh

Caras, por enquanto, DBF direto, rede local. Daqui um tempinho (logo!), vou ter que partir pra SQL, acesso remoto, aí vou ter que aprender esse trem ae...

Enviado: 02 Jan 2008 09:11
por janio
Pessoal,

Fiz um teste semelhante com MySql + Mediator.

Arquivo de vendas com 72.000 registros... 10 chaves... 38 campos...

Fiz uma rotina pra mostrar todas as vendas de um determinado cliente. Em menos de 1.5s o 5.278 registros apareceram no meu tbrowse.

Muito bom.


Jânio