Clipper On Line • Ver Tópico - LetoDb - Bug com Temporary Additive

LetoDb - Bug com Temporary Additive

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

LetoDb - Bug com Temporary Additive

Mensagempor asimoes » 17 Fev 2016 10:36

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

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
FOR I:=1 TO APC01->(OrdCount())
   ? APC01->(OrdName(i))
   ? APC01->(OrdKey(i))
   ? APC01->(OrdFor(i))
   inkey(0)
NEXT

Agora é criado o indice temporário:
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.

   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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb - Bug com Temporary Additive

Mensagempor asimoes » 17 Fev 2016 12:03

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb - Bug com Temporary Additive

Mensagempor asimoes » 17 Fev 2016 13:21

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb - Bug com Temporary Additive

Mensagempor JoséQuintas » 17 Fev 2016 19:01

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

LetoDb - Bug com Temporary Additive

Mensagempor asimoes » 17 Fev 2016 19:46

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb - Bug com Temporary Additive

Mensagempor fladimir » 03 Mar 2017 02:16

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:

********************************************************************************
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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDb - Bug com Temporary Additive

Mensagempor Itamar M. Lins Jr. » 03 Mar 2017 09:08

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

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb - Bug com Temporary Additive

Mensagempor Itamar M. Lins Jr. » 03 Mar 2017 09:12

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb - Bug com Temporary Additive

Mensagempor fladimir » 03 Mar 2017 21:37

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.

#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.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDb - Bug com Temporary Additive

Mensagempor cl@udio » 03 Mar 2017 23:27

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
cl@udio
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 88
Data de registro: 25 Jan 2007 15:47
Curtiu: 1 vez
Mens.Curtidas: 0 vez

LetoDb - Bug com Temporary Additive

Mensagempor fladimir » 04 Mar 2017 00:35

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDb - Bug com Temporary Additive

Mensagempor fladimir » 04 Mar 2017 09:49

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

   
   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

#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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDb - Bug com Temporary Additive

Mensagempor Itamar M. Lins Jr. » 04 Mar 2017 10:05

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

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb - Bug com Temporary Additive

Mensagempor fladimir » 04 Mar 2017 10:17

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.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 13 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro