Как разрешить SQLite SUM () между датами, используя Delphi? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть база данных SQLite с соответствующими файлами: (полное имя, телефон, StartDate, Montant), и я хочу вычислить сумму SUM для поля «Montant», которое находится в диапазоне дат, например (SUM (Montant) между 01/ 01/2018 и 03/01/2018).

на изображении ниже описана моя проблема: SQL возвращает неверный результат 200, но верным является 120 для дат между 01.01.2008 и 02/01 /2018. SQL возвращает неправильный результат

Еще одна проблема заключается в том, что когда я ставлю StartDate больше или после даты базы данных, исключение типа float увеличивается, как на рисунке.Начальная дата - 01/01/2018, а конечная дата - 10/01/2018. Здесь произошло исключение с плавающей точкой

в абсолютной базе данных возвращает ноль и никаких исключений, но SQLite возвращает исключение, поскольку он нашел поле empy.

помогите, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Спасибо всем, после тяжелой работы и тестирования, я нашел решение и поделюсь им со всеми разработчиками Delphi:

function _sqlSelectSumBetweenDates(aQuery: TFDQuery; aTable: string; aSumField: string; aField: string; aDate1: string; aDate2: string): Real;
var d1, d2: string;
begin
d1 := _SQLiteDateFormat(StrToDate(aDate1));
d2 := _SQLiteDateFormat(StrToDate(aDate2));
try
aQuery.SQL.Clear();
aQuery.SQL.Text := 'SELECT SUM(' + aSumField + ') FROM ' + aTable + ' WHERE ' + aField + ' BETWEEN ' + QuotedStr(d1) + ' AND ' + QuotedStr(d2);
aQuery.Active   := True;
Result          := aQuery.Fields[0].AsFloat;
except
Result := 0;
end;
end;

function _SQLiteDateFormat(aDate: TDate): string;
begin
Result := FormatDateTime('YYYY-MM-DD', aDate);
end;

знаю, что вы можете вызвать функцию:

function _sqlSelectSumBetweenDates(aQuery: TFDQuery; aTable: string; aSumField: string; aField: string; aDate1: string; aDate2: string): Real;

и замените переменные вашими значениями.

0 голосов
/ 23 мая 2018

Как вы описываете, ответ "20".То, на что вы ссылаетесь при ответе 120: => date1 и

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...