[Lazarus] TPQConnection and float

LacaK lacak at zoznam.sk
Tue Mar 22 07:46:57 CET 2016


This is probably same bug as #29760 
(http://bugs.freepascal.org/view.php?id=29760)
See last comment there. (bug exists in FPC 3.0, so you can downgrade to 
FPC 2.6.4 and test)
-Laco.

> Hi !
> I'm new to Lazarus (since Saturday)
> but in the 90:ies id wrote some Turbo Pascal for school and liked it.
> However, the last 15 years, I've worked with a system written in Ada
> so that is the language I'm fluid in.
> But it is close to Pascal.
>
> So - I started to write a form with a tree widget and a graph,
> and started go get data from a database to fill the graph with,
> depending on the selected node in the tree.
> But the values are off with a factor 10000.
>
> I wrote a console test program to reproduce it,
> and in also gets the floats wrong with a factor 10000.
>
> Where should I report this - if this mailing list is not the place?
> But perhaps first of all - am I doing something wrong here ?
> code below.
>
> Besides this, I am really impressed with Lazarus,
> as an IDE.
>
> I've already ordered some books at Amazon.
>
> output as follows:
> C:\pg_test_float>test_float.exe
> A: 1
> B:  1.0000000000000000E+004
> C:  2.2000000000000000E+004
> round(B): 10000
> round(C): 22000
>
> (Win7 , Postgres 9.4, libpq.dll also 9.4, Lazarus 1.6)
>
> program test_float;
> uses
> pqconnection,sqldb ;
>
> function CreateConnection: TPQConnection;
> begin
>   result := TPQConnection.Create(nil);
>   result.Hostname := 'some-server';
>   result.DatabaseName := 'some-db';
>   result.UserName := 'some-user';
>   result.Password := 'some-pass;
> end;
>
> function CreateTransaction(pConnection: TPQConnection): TSQLTransaction;
> begin
>   result := TSQLTransaction.Create(pConnection);
>   result.Database := pConnection;
> end;
>
> function CreateQuery(pTransaction: TSQLTransaction): TSQLQuery;
> begin
>   result := TSQLQuery.Create(pTransaction.Database);
>   result.Database := pTransaction.Database;
>   result.Transaction := pTransaction
> end;
>
> var
> PQConn : TPQConnection;
> T      : TSQLTransaction;
> Q1, Q2, Q3 : TSQLQuery;
>
> A : LongInt;
> B,C : Double;
>
> sSql : String;
> begin
>   PQConn := CreateConnection ;
>   PQConn.Open;
>   T := CreateTransaction(PQConn);
>   T.StartTransaction;
>
>   Q1 := CreateQuery(T) ;
>   sSql := 'create table TEST ( ';
>   sSql += 'A integer not null primary key, ';
>   sSql += 'B numeric(8,3) not null , ';
>   sSql += 'C numeric(15,2) not null ) ';
>
>   Q1.SQL.Text := sSql;
>   Q1.ExecSql;
>
>   Q2 := CreateQuery(T) ;
>   sSql := 'insert into TEST values (1, 1.0, 2.2)';
>   Q2.SQL.Text := sSql;
>   Q2.ExecSql;
>
>   Q3 := CreateQuery(T) ;
>   sSql := 'select * from TEST order by A';
>   Q3.SQL.Text := sSql;
>   Q3.Open;
>   if not Q3.Eof then begin
>     A := Q3.FieldByName('A').AsLongint;
>     B := Q3.FieldByName('B').AsFloat;
>     C := Q3.FieldByName('C').AsFloat;
>     Writeln('A: ', A);
>     Writeln('B: ', B);
>     Writeln('C: ', C);
>     Writeln('round(B): ', round(B));
>     Writeln('round(C): ', round(C));
>
>   end
>   else
>     writeln('Eos');
>
>   Q3.Close;
>   T.Rollback;
>   Q1.Free;
>   Q2.Free;
>   Q3.Free;
>   T.Free;
>   PQConn.Close;
> end.
>
>
> -- 
> /Björn
>
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus




More information about the Lazarus mailing list