LetoDb - Bug com Temporary Additive

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDb - Bug com Temporary Additive

Mensagem por asimoes »

Pessoal,

Gostaria de uma confirmação sobre um bug com indices temporários usando a clausula Temporary ou Memory Additive com o rdd Leto

A situação é esta:
Em uma rotina eu faço isto:

O indice real da tabela APC01 é APC01.CDX

Código: Selecionar todos

APC01->(ordListClear()) //Remove o indice APC01.CDX da área de trabalho.
Até aqui tudo bem, não há indice na área de trabalho.
Só para confirmar que não há nenhum indice na área de trabalho, faço o For..Next OrdCont() que é zero

Código: Selecionar todos

FOR I:=1 TO APC01->(OrdCount())
   ? APC01->(OrdName(i))
   ? APC01->(OrdKey(i))
   ? APC01->(OrdFor(i))
   inkey(0)
NEXT
Agora é criado o indice temporário:

Código: Selecionar todos

INDEX ON CODIGO TAG TEMPIND01 FOR !Deleted() TEMPORARY ADDITIVE //Aparentemente cria o indice temporário.
O Problema que eu verifiquei é que o aquivo APC01.CDX foi atualizado!!!???

Então temos um bug na criação de indices temporários com LetoDb?

Fiz o mesmo teste em um programa sem letodb usando somente o rdd dbfcdx
O resultado do teste foi sem erro, o indice temporário foi criado e o indice fisico apc01.cdx não foi modificado.

Código: Selecionar todos

   USE APC01 ALIAS APC01 SHARED NEW VIA "DBFCDX"
   
   INDEX ON CODIGO TAG CODIGO TO APC01
   
   APC01->(DbCloseArea())
   
   USE APC01 ALIAS APC01 SHARED NEW VIA "DBFCDX"
   SET INDEX TO APC01.CDX
   FOR I:=1 TO APC01->(OrdCount())
       ? APC01->(OrdName(i))
       ? APC01->(OrdKey(i))
       ? APC01->(OrdFor(i))
       inkey(0)
   NEXT
   
   APC01->(OrdListClear())
   
   FOR I:=1 TO APC01->(OrdCount()) //verifica se há algum indice
       ? APC01->(OrdName(i))
       ? APC01->(OrdKey(i))
       ? APC01->(OrdFor(i))
       inkey(0)
   NEXT
   
   INDEX ON UTI+CODIGO TAG TEMPIND01 FOR UTI="S" .AND. !Left(Classe_Pg,2) $ "06,08,10,11,12" .AND. Empty(D_Faleci) .AND. Empty(D_Deslig) .AND. !Deleted() TEMPORAY ADDITIVE
   
   FOR I:=1 TO APC01->(OrdCount())
       ? APC01->(OrdName(i))
       ? APC01->(OrdKey(i))
       ? APC01->(OrdFor(i))
       inkey(0)
   NEXT
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDb - Bug com Temporary Additive

Mensagem por asimoes »

Informação complementar:

Fiz o teste com HBNETIO e não houve o erro, o bug é no LetoDb
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDb - Bug com Temporary Additive

Mensagem por asimoes »

Caraca,

Esse bug tá fazendo o indice inflar mais que balão de circo.

Vou ter voltar pro hbnetio.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LetoDb - Bug com Temporary Additive

Mensagem por JoséQuintas »

Mas encontrou algum problema com hbnetio, ou apenas quis testar lettodb?

Só lembrando:
O servidor hbnetio vém pronto pra uso no Harbour.
Sinceramente... nem sei como instalar. Acho que faz mais de um ano que instalei e nunca precisei mexer.
Continua rodando até hoje.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDb - Bug com Temporary Additive

Mensagem por asimoes »

Quintas,
Mas encontrou algum problema com hbnetio, ou apenas quis testar lettodb?
Com hbnetio, está funcionando, da mesma forma se usar somente o rdd dbfcdx
O problema é com o letodb, mesmo usando ordlistclear() o letodb atualiza o indice fisico, para indices criados com temporary ou memory.
cada vez que faço uso do temporário ele bagunça o indice fisico como eu disse "inflando" erro critico! espero que alguém aqui confirme este bug que eu estou informando.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDb - Bug com Temporary Additive

Mensagem por fladimir »

Fiquei na dúvida, mas como o assunto é relativo a LetoDB e Additive Temporary vou postar aki...

Só um detalhe estou testando o LetoDB FORK (conforme tópico)

nas chamadas q tem Additive Temporary esta dando problema... exemplo:

Código: Selecionar todos

********************************************************************************
PROCEDURE Consulta()
********************************************************************************
	private dDt1, dDt2

	dDt1 := date()
   dDt2 := date()
   
	Abre('Vendas')
   INDEX ON RIGHT(Vendas->NrVenda,4) TO (temporario) ;
		FOR Vendas->Data >= dDt1 .and. Vendas->Data <= dDt2  ADDITIVE TEMPORARY // Aki da erro  no Log esta: Error Base/1003 Variable does not exist: dDt1 (sendo q tem)
		
...		 
return 
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LetoDb - Bug com Temporary Additive

Mensagem por Itamar M. Lins Jr. »

Ola!
Já tinha passado por este problema com o LetoDBf.

Código: Selecionar todos

2016-12-28 11:11 UTC+0100 Rolf 'elch' Beckmann (elchs users.noreply.github.com)
  * include/letocl.h
  * source/client/leto1.c
  * source/client/letocl.c
    + fExlusive flag for creating index
    ! fix LetoDbSkip() skipbuffer use
    ; Thanks! to Itamar for pointig to it

  * source/server/letofunc.c
    + fExlusive flag for creating index
    ! fix filename verification for fTemporary index

  * Readme.txt
  * source/server/leto_lnx.c
  * source/server/server.prg
    + adding UID and GID for Linux server to run as daemon

Tem que ativar isso, no letodb.ini "No_Save_WA = 1"
# Using temporary index orders [ created in Server OS temporary path ] are only possible in
mode: NO_Save_Wa = 1.
Leia o readme.txt tem mais coisas lá.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LetoDb - Bug com Temporary Additive

Mensagem por Itamar M. Lins Jr. »

Ola!
Quanto ao outro problema com o Letodb... vem a mesma resposta que estamos acostumados:
Tem que criar um programinha simples que demonstre o problema para que todos possam testar.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDb - Bug com Temporary Additive

Mensagem por fladimir »

A propriedade q vc citou no letodb.ini já estava setada igual ao mencionado.

Segue exemplo q independente se é Temporario (preciso tb) ou não o erro ocorre, então pra isolar fiz um exemplo sem o temporário pra após contornado ver se o temporário vai funcionar.

Código: Selecionar todos

#include 'rddleto.ch'
func erro()
	LOCAL cPath, nConnect

	PRIVATE dt1 := Date()-30,; //----> Pensei q pudesse ser visibilidade tentei LOCAL, PRIVATE, STATIC, PUBLIC 
			  dt2 := Date()

	cPath := "//AKI_VAI_O_IP:2812/"
	RDDSETDEFAULT( 'LETO' )
	nConnect := leto_Connect(cPath)
	if nConnect == -1
		nRes := leto_Connect_Err()
		if nRes == LETO_ERR_LOGIN
			alert( "Falha ao Logar" )
		elseif nRes == LETO_ERR_RECV
			alert( "Error ao conectar" )
		elseif nRes == LETO_ERR_SEND
			alert( "Erro de envio" )
		else
			alert( "Nao connectado ao servidor: " + cPath )
		endif
		return .F.
	endif

	DBCLOSEALL()
 	DbUseArea( .T., 'LETO', 'VENDAS', 'VENDAS', .T.)   
   DBSETINDEX('VENDAS')
   INDEX ON RIGHT(VENDAS->NrVenda,4) TO Teste1 FOR VENDAS->DtVenda >= dt1 .and. VENDAS->DtVenda <= dt2 //--> Tentei trocar o nome das variáveis, tirar a referencia do alias VENDAS->
RETURN	                                        //--> Aki o original ‚ TEMPORARY (no letodb.ini esta setado akela sugestao) mas tirei pq tb nao deu certo
O Erro permanece dizendo q a variavel não é encontrada (segue imagem)
Imagem sem título.png
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.
cl@udio
Usuário Nível 2
Usuário Nível 2
Mensagens: 88
Registrado em: 25 Jan 2007 16:47

LetoDb - Bug com Temporary Additive

Mensagem por cl@udio »

Boa noite a todos.
Fladimir
Tem algum problema com as clausulas FOR e WHILE.
Tenho este problema algumas vezes.
Apago todos os indices temporarios, e volta ao normal.
Mas ainda nao consegui identificar o erro.
Pois a TAG e totalmente diferente.
Trabalho com CDX.
[]s
Claudio
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDb - Bug com Temporary Additive

Mensagem por fladimir »

Claudio obrigado pela atenção, mas se observar no código, estou testando sem ser indice temporário e ocorre o problema
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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDb - Bug com Temporary Additive

Mensagem por fladimir »

Se no exemplo postado eu trocar a condição do FOR para texto conforme abaixo, funciona, tanto pra indice normal ou temporario.

Código: Selecionar todos

   
   cCondicao :=  "VENDAS->DtVenda >= " + DTOC(dt1) + " .and. VENDAS->DtVenda <= " + DTOC(dt2) //--> fazendo assim da certo
   INDEX ON RIGHT(VENDAS->NrVenda,4) TO Teste1 FOR &cCondicao TEMPORARY // Ai funciona das 2 formas sem TEMPORARY e com.
Não sei se pode ser alguma configuração ou se é questão de avisar o pessoal da LETODB, se mais alguém pudesse testar o código exemplo e comprovar se a hipótese esta correta.

De qualquer forma vou continuar os testes aki pra ver como se comporta.

Agora, caso os testes dos colegas e a hipótese acima se confirme, pra não ter q mudar os meus INDEX.... vou ver pra fazer um

Código: Selecionar todos

#command INDEX => OrdCreate() ou para DbCreateIndex()
Mas isso seria um assunto para depois de avaliarmos as opções disponíveis.

[] 's
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LetoDb - Bug com Temporary Additive

Mensagem por Itamar M. Lins Jr. »

Ola!
O erro está correto.
A variável DT1 não existe do lado do servidor. Assim como não funcionará em qualquer sentença SQL. Tem que expandir mesmo

Código: Selecionar todos

cQuery := " dtos(vencimento) >= '"+dtos(dIni)+"' .and. dtos(vencimento) <= '"+dtos(dFim)+"' "

cOrdBy := " dtos(vencimento) + cod_banco + numero " //conta + dtos(vencimento) "

dbSelectArea('ch')
IF ch->(ordNumber("CH100")) > 0
   ch->(ordDestroy("CH100"))
EndIf

Index on &cOrdBy TAG ch100 FOR &cQuery temporary additive
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDb - Bug com Temporary Additive

Mensagem por fladimir »

Obrigado Itamar por confirmar minha avaliação e prestar um esclarecimento do pq não achar a variavel q é pq do lado do Servidor não tem. Ok.

[] 's
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.
Responder