Delphi - ClientDataSet SQL计算字段在运行时导致“无效字段类型”错误

时间:2017-08-09 12:41:24

标签: sqlite delphi firemonkey tclientdataset

我有一个ClientDataSet,它使用TFDQuery从SQLite数据库中的表加载数据。

SQL查询从银行账户表中选择字段:AccountID,Name,StartBalance和CurrentBalance。 CurrentBalance是一个计算字段。

这是查询:

SELECT 
  p1.AccountID, 
  p1.Name, 
  p1.StartBalance,
  cast(
    p1.StartBalance 
    + (SELECT TOTAL(Amount) 
       FROM Trx p2
       WHERE (p2.AccountID1 = p1.AccountID
              AND p2.TrxType = 'income')
          OR (p2.AccountID2 = p1.AccountID
              AND p2.TrxType = 'transfer'))
    - (SELECT TOTAL(Amount) 
       FROM Trx p3
       WHERE p3.AccountID1 = p1.AccountID
         AND (p3.TrxType = 'expense' OR p3.TrxType = 'transfer'))
   as Currency) AS CurrentBalance
FROM Account p1;

此查询运行良好并产生预期结果。此外,当Account表中存在现有记录时,我能够使用以下FieldDef将结果成功加载到ClientDataSet中:

  • AccountID(ftInteger)
  • 名称(ftString)
  • StartBalance(ftCurrency)
  • CurrentBalance(ftCurrency)

但是,当表中没有记录并且我尝试打开ClientDataSet(cdsAccount.Open)时,我收到运行时错误:“无效的字段类型”。 如果我从查询和ClientDataSet的FieldDef中删除计算字段(CurrentBalance),则不会产生错误。

0 个答案:

没有答案