如何获得agregate字段的正确数据类型?

时间:2017-10-24 16:30:31

标签: sqlite delphi delphi-xe5

CREATE TABLE [Table1] (
  [OrderNumber] integer, 
  [Amount] float 
);

使用dbExpress库中的TSQLQuery

  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Text := 'select sum(Amount) from Table1 group by OrderNumber';
  SQLQuery1.Open;
  SQLQuery1.First;
  Memo1.Lines.Add(FloatToStr(SQLQuery1.Fields.FieldByNumber(1).AsFloat));

结果,我得到了:

  

异常类EDatabaseError,消息'无法访问字段'Column0'为类型Float'。

但如果我试图获得String的值,则没有错误。它有效:

Memo1.Lines.Add(SQLQuery1.Fields.FieldByNumber(1).AsString);

如何获取Float中的数据?

1 个答案:

答案 0 :(得分:0)

我被迫使用这个解决方案:

  SQLQuery1.SQL.Text :=
  'drop table if exists temp.agregatetable1;      ';
  SQLQuery1.ExecSQL(False);
  SQLQuery1.SQL.Text :=
  'create temp table if not exists AgregateTable1 '+
  '(                                              '+
  '  [OrderNumber] integer,                       '+
  '  [SumAmount] float                            '+
  ');                                             ';
  SQLQuery1.ExecSQL(False);
  SQLQuery1.SQL.Text :=
  'insert into Temp.AgregateTable1                '+
  'select                                         '+
  '     OrderNumber,                              '+
  '     sum(Amount)                               '+
  'from                                           '+
  '     Table1                                    '+
  'group by                                       '+
  '      OrderNumber;                             ';
  SQLQuery1.ExecSQL(False);
  SQLQuery1.SQL.Text := 
  'select SumAmount from Temp.AgregateTable1      ';
  SQLQuery1.Open;
  SQLQuery1.First;
  while not SQLQuery1.Eof do
    begin
      Memo1.Lines.Add(FloatToStr(SQLQuery1.Fields.FieldByNumber(1).AsFloat));
      SQLQuery1.Next;
    end;

但如果有人知道更好的方式,如果你分享它我会很高兴。