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