2017-10-24 11 views
1
CREATE TABLE [Table1] (
    [OrderNumber] integer, 
    [Amount] float 
); 

dbExpressライブラリのTSQLQueryを使用してください。agregateフィールドの正しいデータ型を取得するには?

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)); 

その結果、私が取得:メッセージと

ExceptionクラスEDatabaseError 'Float型として 'COLUMN0' フィールドにアクセスできません'。

しかし、私がStringとして値を取得しようとするとエラーはありません。それは働く:

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

どのようにデータを取得するFloat

+0

この質問を見るhttps://stackoverflow.com/questions/32814875/how-in-delphi-can-i-force-an-sqlite-aggregate-field-to-be-a-numeric-field .. –

+0

@JohnEasley私はすべての変種 '表1 ...から'( '' sum(Amount)*)を選択するようにしましたが、同じエラーが発生しました – HeathRow

+0

Column1を使用しているとき、エラーがColumn0を参照することを奇妙に思う。両方の列が結果セットになるように試した 'SELECT OrderNumber、sum(Amount)FROM Table1 Group by OrderNumber'を持っていますか? –

答えて

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; 

誰かがより良い方法を知っていれば、あなたがそれを共有する場合、私は喜んでいるでしょう。

関連する問題