Indices temporários, duvidas

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Indices temporários, duvidas

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Indices temporários, duvidas

Mensagem 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?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Indices temporários, duvidas

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Indices temporários, duvidas

Mensagem 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)
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Indices temporários, duvidas

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Indices temporários, duvidas

Mensagem 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!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Indices temporários, duvidas

Mensagem por sygecom »

Será que seu cQuery está chegando vazio ? testa antes se ele está vazio para não rodar o INDEX
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Indices temporários, duvidas

Mensagem por ivanil »

aList := hb_RegExSplit(" ",alltrim(cFiltro))
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Indices temporários, duvidas

Mensagem 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!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder