Delphi - вычисляемое поле ClientDataSet SQL, вызывающее ошибку недопустимого типа поля во время выполнения

У меня есть 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, то ошибки не возникает.


person Scott Hallauer    schedule 09.08.2017    source источник
comment
docwiki.embarcadero.com/RADStudio/Tokyo/en/   -  person CL.    schedule 09.08.2017
comment
О, круто! Спасибо, это решило мою проблему. Просто нужно было выбрать AS CurrentBalance::Currency   -  person Scott Hallauer    schedule 09.08.2017
comment
Я пытался перефразировать этот вопрос, чтобы сделать его более общим.   -  person Victoria    schedule 09.08.2017