Página 1 de 1

Bug Harbour

Enviado: 19 Jan 2017 21:21
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 )

Bug Harbour

Enviado: 19 Jan 2017 21:32
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

Bug Harbour

Enviado: 19 Jan 2017 21:34
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

Bug Harbour

Enviado: 19 Jan 2017 21:52
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