Lazarus 0.9.22, Windows XP, PostgreSQL 8.2.
When passing a parameter value to SQLQuery (ParamByName method) during run 
time, an error "floating point overflow" occurs. The error appears only when 
there are many fields (a dozen) in a query. When I reduced number of columns to 
few, passing of parameters worked OK.
I tested this behavior both with pass-through query (SQL string completely on 
Lazarus side) and query based on PostgreSQL view (select * from view) and in 
both cases the same error exists. It seems that it depends only on number of 
columns (fields) included in a query.
The same query, but without parameters, works OK.
Also, I successfully use filter property instead of using parameters. But it's 
a hack...
If someone wants to test it, I can send zipped project and the database.

procedure TForm1.Button3Click(Sender: TObject);
var strSQL:String;
var param:String;
begin
  SQLQuery1.DisableControls;
  SQLQuery1.Params.ParamByName('kontrolnibroj').AsString:='000034050';
  //SQLQuery1.Params[0].AsString:='000034050';
  SQLQuery1.Active:=True;
  SQLQuery1.EnableControls;
end;   
                     
object Form1: TForm1
  Left = 290
  Height = 522
  Top = 157
  Width = 682
  HorzScrollBar.Page = 681
  VertScrollBar.Page = 521
  ActiveControl = DBGrid1
  Caption = 'Form1'
  object DBGrid1: TDBGrid
    Left = 16
    Height = 272
    Top = 240
    Width = 666
    AutoFillColumns = True
    DataSource = Datasource1
    FixedColor = clBtnFace
    Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, 
dgColLines, dgRowLines, dgTabs, dgAlwaysShowSelection, dgConfirmDelete, 
dgCancelOnExit]
    OptionsExtra = [dgeAutoColumns, dgeCheckboxColumn]
    ParentColor = False
    ReadOnly = True
    TabOrder = 0
    TabStop = True
  end
  object Button1: TButton
    Left = 64
    Height = 25
    Top = 96
    Width = 75
    BorderSpacing.InnerBorder = 4
    Caption = 'Preview report'
    OnClick = Button1Click
    TabOrder = 1
  end
  object Button3: TButton
    Left = 64
    Height = 25
    Top = 144
    Width = 75
    BorderSpacing.InnerBorder = 4
    Caption = 'Set parameter'
    OnClick = Button3Click
    TabOrder = 2
  end
  object DBComboBox1: TDBComboBox
    Left = 231
    Height = 21
    Top = 82
    Width = 100
    DataField = 'batch'
    DataSource = Datasource2
    MaxLength = 0
    ReadOnly = True
    TabOrder = 3
  end
  object PQConnection1: TPQConnection
    Connected = True
    DatabaseName = 'MONITORINGZ_DEMO'
    LoginPrompt = True
    Password = 'something'
    Transaction = SQLTransaction1
    UserName = 'postgres'
    HostName = 'localhost'
    left = 8
    top = 8
  end
  object SQLQuery1: TSQLQuery
    AutoCalcFields = True
    Database = PQConnection1
    Transaction = SQLTransaction1
    ReadOnly = True
    SQL.Strings = (
      'SELECT'
      #9'"departments"."department",'
      #9'"plants"."plant",'
      #9'"batches_microbs"."sampling_type",'
      #9'"batches_microbs"."batch",'
      #9'"batches_microbs"."sampling_datetime",'
      #9'"batches_microbs"."status",'
      #9'"batches_microbs"."batch_commentary",'
      #9'"results_microbs"."area",'
      #9'"results_microbs"."area_description",'
      #9'"results_microbs"."class",'
      #9'"results_microbs"."sample",'
      #9'"results_microbs"."sample_description",'
      #9'"results_microbs"."alert_limit",'
      #9'"results_microbs"."action_limit",'
      #9'"results_microbs"."result",'
      #9'"results_microbs"."measuring_unit",'
      #9'"results_microbs"."sample_commentary",'
      ' alert_limit_exceeds("results_microbs"."result",'
      '    "results_microbs"."alert_limit",'
      '    "results_microbs"."action_limit") as "alert_limit_exceeds",'
      '    alert_limit_passes("results_microbs"."result",'
      '    "results_microbs"."alert_limit") as "alert_limit_passes",'
      '    action_limit_exceeds("results_microbs"."result",'
      '    "results_microbs"."action_limit") as "action_limit_exceeds",'
      '    action_limit_passes("results_microbs"."result",'
      '    "results_microbs"."action_limit") as "action_limit_passes",'
      '    exceeds_sum("results_microbs"."result",'
      '    "results_microbs"."alert_limit",'
      '    "results_microbs"."action_limit") as "exceeds_sum",'
      '    exceeds_total(exceeds_sum("results_microbs"."result",'
      '    "results_microbs"."alert_limit",'
      '    "results_microbs"."action_limit")) as "exceeds_total"'
      'FROM'
      #9'"public"."batches_microbs" "batches_microbs" '
      #9#9'INNER JOIN "public"."results_microbs" "results_microbs" '
      #9#9'ON "batches_microbs"."batch" = "results_microbs"."batch" '
      #9#9#9'INNER JOIN "public"."plants" "plants" '
      #9#9#9'ON "plants"."plant" = "batches_microbs"."plant" '
      #9#9#9#9'INNER JOIN "public"."departments" "departments" '
      #9#9#9#9'ON "departments"."department" = "plants"."department" '
      'WHERE "batches_microbs"."batch"= :kontrolnibroj;'
    )
    IndexDefs = <>
    Params = <    
      item
        DataType = ftString
        Name = 'kontrolnibroj'
        ParamType = ptInput
      end>
    UpdateMode = upWhereKeyOnly
    UsePrimaryKeyAsKey = True
    ParseSQL = True
    left = 8
    top = 48
  end
  object SQLTransaction1: TSQLTransaction
    Active = True
    Database = PQConnection1
    left = 8
    top = 88
  end
  object Datasource1: TDatasource
    DataSet = SQLQuery1
    left = 8
    top = 128
  end
  object frDBDataSet1: TfrDBDataSet
    DataSet = SQLQuery1
    left = 8
    top = 200
  end                   

Regards,

Zlatko

Reply via email to