[fpc-pascal] Postgresql interface bronken for Raspberry pi model 1b
    Björn Lundin 
    b.f.lundin at gmail.com
       
    Mon Mar 28 00:44:59 CEST 2016
    
    
  
Hi!
I'm using a pi as a monitor for some process, so I'm trying to get SDL2
and a working postgres interface on it.
However I'm running into trouble on timestamps fields on the pi.
I wrote a console program on Win7, using 32-bit compiler bundled with
Lazarus 1.6. (I think is is fpc 3.0.0)
and that platform can connect to the db, and run the program.
C:\pascal\pg_test_float>test_float.exe
A: 1
B:  1.0000000000000000E+000
C:  4.2457016203831023E+004
round(B): 1
round(C): 42457
The same program on the pi crashes.
pi at raspberrypi ~ $ fpc -v
Free Pascal Compiler version 2.6.0-9+rpi1+wsf1 [2015/04/28] for arm
Copyright (c) 1993-2011 by Florian Klaempfl and others
pi at raspberrypi ~ $ uname -a
Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015
armv6l GNU/Linux
pi at raspberrypi ~/svn/bnlbot/botstart/bot-1-0/source/pascal $ ./test_float
An unhandled exception occurred at $000302D4 :
EDatabaseError :  : Unknown fieldtype for parameter "DT".
  $000302D4
  $0001C4D0
  $00020DE8
  $00008760
pi at raspberrypi ~/svn/bnlbot/botstart/bot-1-0/source/pascal $ addr2line
-e test_float 000302D4 0001C4D0 00020DE8 00008760
/home/pi/svn/bnlbot/botstart/bot-1-0/source/pascal/test_float.lpr:85
/home/pi/svn/bnlbot/botstart/bot-1-0/source/pascal/test_float.lpr:85
/home/pi/svn/bnlbot/botstart/bot-1-0/source/pascal/test_float.lpr:85
/home/pi/svn/bnlbot/botstart/bot-1-0/source/pascal/test_float.lpr:57
where line 57 is market <---- here in code below
ie. Q2.Params.ParamByName('DT').Value := now;
program test_float;
uses
pqconnection,sqldb,sysutils,db;
function CreateConnection: TPQConnection;
begin
  result := TPQConnection.Create(nil);
  result.Hostname := 'db.somewhwew.com';
  result.DatabaseName := 'asd';
  result.UserName := 'asd';
  result.Password := 'pwd';
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 : Double;
C : TDateTime;
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 timestamp(3) without time zone not null ) ';
  Q1.SQL.Text := sSql;
  Q1.ExecSql;
  Q2 := CreateQuery(T) ;
  sSql := 'insert into TEST values (1, 1.0, :DT)';
  Q2.SQL.Text := sSql;
  Q2.Prepare;
  //Q2.Params.ParamByName('DT').DataType := ftDateTime;
  Q2.Params.ParamByName('DT').Value := now;             <----Here
  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').AsDateTime;
      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.
Ideas ?
--
Björn
    
    
More information about the fpc-pascal
mailing list