Bug Harbour

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

Bug Harbour

Mensagem por JoséQuintas »

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   LOCAL cn, Rs, n, nKey := 0

   cn := win_OleCreateObject( "ADODB.Connection" )
   cn:ConnectionString := ;
      "Driver={MySQL ODBC 3.51 Driver};Server=xxx;" + "Port=0; " + ;
      ";Stmt=;Database=xxx;User ID=xxx;Password=xx;Collation=latin1;" + ;
      "AUTO_RECONNECT=1;COMPRESSED_PROTO=0;PAD_SPACE=1"
   cn:CursorLocation    := 3 // AD_USE_CLIENT
   cn:CommandTimeOut    := 600
   cn:ConnectionTimeOut := 600

   cn:Open()
   Rs := cn:Execute( "SELECT * FROM JPPREHIS LIMIT 100" )

   DO WHILE nKey != 27 .AND. ! Rs:Eof()
      nKey := Inkey()
      n := Rs:Fields( "PHVALOR" ):Value
      n2 := n + 0.000000
      ? n, n2, Str( n ), Str( n2 )
      Rs:MoveNext()
   ENDDO
   Rs:Close()
   Cn:Close()

   RETURN

Código: Selecionar todos

   1.83          1.834400          1.83          1.834400
         1.86          1.855000          1.86          1.855000
         2.06          2.063100          2.06          2.063100
         2.09          2.086900          2.09          2.086900
         1.92          1.915000          1.92          1.915000
         2.08          2.081400          2.08          2.081400
         1.98          1.980000          1.98          1.980000
         2.05          2.046200          2.05          2.046200
         1.89          1.890000          1.89          1.890000
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
         1.96          1.957900          1.96          1.957900
Está assumindo duas decimais.
Isso num backup feito pelo Harbour, é perda das decimais.

Lembrando que OLE serve pra tudo: ADO, Excel, Word, etc.

Já informei o bug, mas inicialmente parecia se tratar de SET DECIMALS, SET FIXED ON, Str().
Agora é aguardar pra ver o que dá.
Nem tem como testar no Clipper, porque no Clipper não existe OLE.

Não tem a ver com a operação aritmética, porque pegar o valor do campo não tem nada de cálculo.
Não tem a ver com problema no ADO, porque o valor está lá na variável, é o Harbour que não considera as decimais.
Só resta considerar bug.

Só isolando a parte que interessa:

Código: Selecionar todos

n := Rs:Fields( "PHVALOR" ):Value
n2 := n + 0.000000
? n, n2, Str( n ), Str( n2 )
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug Harbour

Mensagem por JoséQuintas »

O comparativo mais próximo seria isto:

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   LOCAL a, b

   a := 1.23450
   b := a + 0.00000
   ? a, Str( a ), b, Str( b ), Val( Str( b ) )


   RETURN

Código: Selecionar todos

      1.23450          1.23450          1.23450          1.23450          1.23450
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
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Bug Harbour

Mensagem por Daniel »

vi isso tambem no minigui
acho que e erro do Ole que muda o ponto decimal para vírgula ai some as decimais
usei uma funcao com Ole para baixa um arquivo, importei sem sair os decimais sumiu
sai do programa entrei de novo e importei sem usar o OLe deu certo
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug Harbour

Mensagem por JoséQuintas »

No caso acima não tem a ver com a vírgula, porque as decimais estão lá, apenas não ficam visíveis.
Neste caso uma opção é somar 0.000000000000
O difícil é lembrar disso quando precisar.... rs
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/
Responder