У меня есть ClientDataSet, который загружает свои данные из таблицы в базу данных SQLite с помощью TFDQuery.
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 есть записи, я могу успешно загрузить результаты в ClientDataSet со следующими FieldDefs:
- ID учетной записи (ftInteger)
- Имя (ftString)
- Стартовый баланс (ftCurrency)
- Текущий баланс (ftCurrency)
Однако, когда в таблице нет записей и я пытаюсь открыть ClientDataSet (cdsAccount.Open), я получаю ошибку времени выполнения: "Недопустимый тип поля". Если я удаляю вычисляемое поле (CurrentBalance) как из запроса, так и из FieldDefs ClientDataSet, то ошибки не возникает.