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
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 )

