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
中的数据?
答案 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;
但如果有人知道更好的方式,如果你分享它我会很高兴。