Página 2 de 2

Indices temporários, duvidas

Enviado: 18 Set 2016 10:31
por JoséQuintas
Também agiliza se usar um índice existente como base, usando WHILE por exemplo.

Código: Selecionar todos

IF mMesNtx != nOpcMes
   Mensagem( "Aguarde... Organizando movimentação do mes..." )
   SET INDEX TO ( PathAndFile( "ctdiari" ) )
   SEEK m_AnoMes
   INDEX  ;
      ON ctdiari->diCCusto + ctdiari->diCConta + dtos( ctdiari->diData ) + ctdiari->diLote + ctdiari->diLanc + ctdiari->diMov ;
      TO (mTmpFile) ;
      FOR Val(ctdiari->diCCusto)#0 .AND. GrafProc() ;
      WHILE Left(dtos(ctdiari->diData),6) == m_AnoMes
   mMesNtx := nOpcMes
ENDIF

Indices temporários, duvidas

Enviado: 04 Mar 2017 19:17
por fladimir
Cai aki procurando sobre OrdCondSet pra fazer um #command para o Index e já tava pronto e eu me matando a tarde de sabado toda e fui achar só agora... kkk mas q bom q achei e deu certo,

Agora com relação ao tópico 2 dúvidas...

Zé onde vc achou o #command do INDEX .... => OrdCondSet(), OrdCreate() q acabou elucidando a questão de q MEMORY e TEMPORARY (q tb tinha dúvida) passa TRUE para o OrdCondSet no parametro lTemporary?

Com relação a usar While no Indice seja temporario ou não pra mim é algo q já tinha visto, porém não tinha utilizado e olhando seu exemplo não entendi 100% poderia explicar?

Pq vc definiu pra usar um indice tal e procurou nele o Ano/Mes para posicionar e a partir disto criou um outro indice limitando com a condição do FOR e enquanto (WHILE) for o AnoMes, correto?

Se sim, o q eu não entendi é o Temporary aki em função do While agilliza tb ou não?

Indices temporários, duvidas

Enviado: 04 Mar 2017 23:09
por JoséQuintas
index.png
o WHILE acaba filtrando os registros que serão inclusos no novo índice, então vai ser mais rápido.
Tem vários meses/anos no arquivo e vão ser utilizados apenas os registros referentes aquele mes/ano.

O tradicional sempre funciona.
As novidades, que dependem de acrescentar alguma coisa, dependem dessa "alguma coisa".

Lembro que esse em memoria só dava certo se acrescentasse a lib correspondente.

Se preferir:

https://github.com/vszakats/harbour-cor ... #L513-L541

Indices temporários, duvidas

Enviado: 21 Jan 2020 14:44
por clodoaldomonteiro
Boa tarde,
Reativando este tópico.

Pode-se mesclar abrir tabela com os índices físicos dela mais um índice temporário, afim de deixar atualizar todos os índices físicos?

Código: Selecionar todos

   SET INDEX TO (ind01), (ind02), (ind03), (ind04), mem:(arqtmp)

Indices temporários, duvidas

Enviado: 21 Jan 2020 15:03
por JoséQuintas
Sim, já fiz uso disso.

Mas cuidado com isso, porque se algum terminal atualizar o DBF, o temporário pode ficar desatualizado e acusar como índice corrompido.

Indices temporários, duvidas

Enviado: 06 Fev 2024 08:38
por deividdjs
bom dia amigos ..

Fiz uma função a tempos para buscar registros na minha base de dados de produtos que contenha palavras chaves .. porem quando o usuario deixa um espaço sem querer na frente da pesquisa apresenta um erro de sintax .. como poderia resolver este problema ?? preciso tirar esse espaço inicial caso haja ...

segue codigo..

Código: Selecionar todos

******************************************************************************
*---------------------*
 procedure BUSCA_PRO          // FILTRA PELA DESCRIۂO PRODUTOS QUE CONTEM POR PALAVRAS CHAVES // USANDO INDICES TEMPORARIOS 
*---------------------*
 local Getlist := {}
 LOCAL cQuery := "", cParte := "", nParte := 0, aList, cFiltro := space(36),;
       vBusc

 SETCURSOR(2)

 vBusc := SavEnv(00,00,25,80)

 SETCOLOR("N/W*,W*/B+")
 WIN(14,17,19,62, "B£squeda", WT_AZUL1BRANCO, WD_AZUL1BRANCO)
 FRAME(16,18,18,61,"Informe la Descripci¢n",1,3,3,3)
 SET COLOR TO "R/W*"
 @17,19 say "" get cFiltro picture "@!" COLOR "R/W*"
 read

 if lastkey()=27
    rstenv(vBusc)
    return(2)
 endif
	    
	IF !Empty(cFiltro)
	   
		aList := hb_RegExSplit(" ",cFiltro)
	   FOR EACH cParte IN aList   
	      IF Empty(cParte)
	         Exit
	      ENDIF
	 
	      IF ++nParte > 1
	         cQuery += ' .AND. '
	      ENDIF
	       
	      cQuery += "'" + cParte + "'" +  ' $ cc_descr'
	             
	   NEXT
	 
	   IF PRO->(ordNumber("TMPFILTRO_PROD")) > 0
	      PRO->(ordDestroy("TMPFILTRO_PROD"))
	   EndIf
	 
	   Index on cc_descr tag TMPFILTRO_PROD FOR &cQuery temporary
 
	   PRO->(dbGoTop())

	ENDIF

   rstenv(vBusc)

	RETURN(2)

*/	  

Código: Selecionar todos

------------------- Internal Error Handling Information  ---------------------

Subsystem Call ....: BASE
System Code .......: 1449
Default Status ....: .F.
Description .......: Erro de sintaxe
Operation .........: &
Arguments .........:  [ 1] = Type: C Val: {||}
Involved File .....: 
Dos Error Code ....: 0

Saludos a todos .. abraço!

Indices temporários, duvidas

Enviado: 06 Fev 2024 09:05
por sygecom
Será que seu cQuery está chegando vazio ? testa antes se ele está vazio para não rodar o INDEX

Indices temporários, duvidas

Enviado: 06 Fev 2024 09:17
por ivanil
aList := hb_RegExSplit(" ",alltrim(cFiltro))

Indices temporários, duvidas

Enviado: 06 Fev 2024 10:19
por deividdjs
ivanil escreveu:aList := hb_RegExSplit(" ",alltrim(cFiltro))
funcionou .. estava pondo ao alltrim no lugar errado ...

uma visão externa sempre funciona .. obrigado amigo ..

Abraço!