1 (edited by bemorhona-qt 2017-02-13 12:04:46)

Topic: Несколько вопросов 5

Уважаемый Дмитрий!

На форме Fond имеется DateTimePicker1 и 2, Button1, TGrid, ostatok (TextBox), omad (TextBox), raft (TextBox), favt (TextBox) и mond (TextBox).
Есть такая вот процедура.

procedure Fond_Button1_OnClick (Sender: string; var Cancel: boolean);
var
i1, i2, i3, i4: integer;
begin
      i1:= SQLExecute('Select Count(numberTB) from Base where incomeDate < '+Fond.DateTimePicker1.sqlDateTime+' and outcomeDate Between '+Fond.DateTimePicker1.sqlDateTime +' and '+Fond.DateTimePicker2.sqlDateTime +'');
      Fond.ostatok.Value:= i1;
      i2:= SQLExecute('Select Count(numberTB) from Base where incomeDate Between '+Fond.DateTimePicker1.sqlDateTime+' and '+Fond.DateTimePicker2.sqlDateTime +'');
      Fond.omad.Value:= i2;
      i3:= SQLExecute('Select Count(numberTB) from Base where outcomeDate Between '+Fond.DateTimePicker1.sqlDateTime+' and '+Fond.DateTimePicker2.sqlDateTime +'');
      Fond.raft.Value:= i3;
      i4:= SQLExecute('Select Count(numberTB) from Base where outcomeDate Between '+Fond.DateTimePicker1.sqlDateTime+' and '+Fond.DateTimePicker2.sqlDateTime +' and Base.id_endoftreatment=2');
      Fond.favt.Value:= i4;
      i5:= i1 + i2 - i3;
      Fond.mond.Value:= i5;
end;

Теперь при указании даты в пикерах 1 и 2 все работает отлично. Например я указываю 01.01.2017 и 31.01.17 и в указанных текстбоксах все калькулируется нормально но с учетом всего месяца.
Как мне сделать чтобы в грид добавилась строка и показывались i1, i2, i3, i4 и i5 на каждый день. Т.е. я указываю 01.01.2017 и 31.01.17 и в грид показывается типа вот так:

01.01.17      i1          i2        i3      i4     i5
02.01.17      i1          i2        i3      i4     i5
03.01.17      i1          i2        i3      i4     i5
...
31.01.17      i1          i2        i3      i4     i5

Надо подчеркнуть что i5 сегодняшнего дня всегда равняется i1 следующего дня. Т.е. если привести примеры в виде цифр то должно получится типа вот так:

                  i1          i2        i3      i4     i5
01.01.17      4           2         3      2     3
02.01.17      3           2         1      3     4
03.01.17      4           1         0      1     5
...
31.01.17      2           2         1      0     3

Помогите с реализацией пожалуйста.

Re: Несколько вопросов 5

Здравствуйте.


Нет возможности в грид добавлять данные в ручную, данные в грид могут попасть исключительно из базы данных, как результат SQL запроса, либо от кнопки с действием "Поиск"

Dmitry.

Re: Несколько вопросов 5

Если в грид нельзя то можно и в Memo, помогите с реализацией пожалуйста, или подталкните как это сделать.

Re: Несколько вопросов 5

Думаю можно вывести и в грид, только необходимо правильно сформировать SQL запрос.


Например так можно вывести дни, от выбранной даты до выбранной даты

WITH RECURSIVE dates(dateValue) AS (
  VALUES({DateTimePicker1})
  UNION ALL
  SELECT date(dateValue, '+1 day')
  FROM dates
  WHERE dateValue < {DateTimePicker2}
)

SELECT

"dateValue"

FROM dates

Приложите пожалуйста ваш проект, с тестовыми данными, постараюсь помочь.

Dmitry.

Re: Несколько вопросов 5

DriveSoft wrote:

Приложите пожалуйста ваш проект, с тестовыми данными, постараюсь помочь.

Post's attachments

Attachment icon demo3.zip 6.92 kb, 409 downloads since 2017-02-14 

Re: Несколько вопросов 5

В вашем проекте нет поля numberTB, которое упоминалось в SQL запросах первого сообщения.

Dmitry.

Re: Несколько вопросов 5

вместо него можете использовать idemployee это тот же numberTB

Re: Несколько вопросов 5

Увы не смогу помочь, ваш проект не соотвествует вопросу, нет такой формы и компонентов

На форме Fond имеется DateTimePicker1 и 2, Button1, TGrid, ostatok (TextBox), omad (TextBox), raft (TextBox), favt (TextBox) и mond (TextBox).
Dmitry.

Re: Несколько вопросов 5

DriveSoft wrote:

Увы не смогу помочь, ваш проект не соотвествует вопросу, нет такой формы и компонентов

На форме Fond имеется DateTimePicker1 и 2, Button1, TGrid, ostatok (TextBox), omad (TextBox), raft (TextBox), favt (TextBox) и mond (TextBox).

Исправлен

Post's attachments

Attachment icon demo3.zip 8.99 kb, 388 downloads since 2017-02-16 

Re: Несколько вопросов 5

Полностью реализовать к сожалению не могу, но в качестве примерного решения сделал SQL запрос для кнопки на форме Fond.

Post's attachments

Attachment icon demo3_fixed.zip 9.28 kb, 419 downloads since 2017-02-16 

Dmitry.

Re: Несколько вопросов 5

Спасибо большое. Работает отлично. Есть только одна проблема. Покажу на примере.
Программа выдает вот это:

                       i1              i2            i3             i4              i5
01.01.17      4               1               2              1               3
02.01.17      4               2               0              1               6
03.01.17      4               1               1              1               4
04.01.17      4               3               0              1               7
и т.д.

В i1 показывается все работники которые остались (i5) до даты DateTimePicker1
В i2 показывается все работники которые пришли между датами DateTimePicker1 и DateTimePicker2 включительно
В i3 показывается все работники которые ушли между датами DateTimePicker1 и DateTimePicker2 включительно
i4 не объязателен можете не учитывать
i5 = i1+i2-i3

В примере все идет отлично, проблема в том что 1-го числа осталось работников 3 (i5).
В 02.01.17 в пункте i1 должно быть 3, т.е. i5 предыдущего дня. В общем пример должен выглядит так:

                       i1              i2            i3             i4              i5
01.01.17      4               1               2              1               3
02.01.17      3               2               0              1               5
03.01.17      5               1               1              1               5
04.01.17      5               3               0              1               8
и т.д.

Как быть?

Re: Несколько вопросов 5

Второй вопрос.
В вашем SQL-запросе в чем разница между:

( Select Count(numberTB) from Base where incomeDate < {DateTimePicker1}

и

( Select Count(numberTB) from Base where date(incomeDate) < date(dateValue)

Re: Несколько вопросов 5

Вопрос решен

14 (edited by bemorhona-qt 2017-02-20 02:39:16)

Re: Несколько вопросов 5

Уважаемый Дмитрий!
Возник еще один вопрос по поводу вывода данных TableGrid1 в Excel.
На форме имеется TableGrid1 с данными и с подвалом. Также имеется кнопка, которая выводит данные TableGrid1 в Excel, но данные подвала грида туда не попадают. Как вывести данные подвала вместе с данными грида в экзель? Помоему это тоже надо посредством SQL запроса но не знаю как. Дайте ссылку или пример использования пожалуйста.

Re: Несколько вопросов 5

bemorhona-qt wrote:

Уважаемый Дмитрий!
Возник еще один вопрос по поводу вывода данных TableGrid1 в Excel.
На форме имеется TableGrid1 с данными и с подвалом. Также имеется кнопка, которая выводит данные TableGrid1 в Excel, но данные подвала грида туда не попадают. Как вывести данные подвала вместе с данными грида в экзель? Помоему это тоже надо посредством SQL запроса но не знаю как. Дайте ссылку или пример использования пожалуйста.

К сожалению в текущей версии данная возможность не реализована, постараюсь ее реализовать в следующей версии.

Dmitry.

Re: Несколько вопросов 5

Можете дать пример экспорта данных грида в экзель посредством SQL-запроса?

Re: Несколько вопросов 5

bemorhona-qt wrote:

Можете дать пример экспорта данных грида в экзель посредством SQL-запроса?

Используйте кнопку с действием "SQL запрос", который заполнит грид необходимыми данными, затем используйте кнопку с действием "Открыть в Excel"

Dmitry.

18 (edited by bemorhona-qt 2017-02-22 08:01:15)

Re: Несколько вопросов 5

спс, но это я знаю, думал есть еще какой нибудь другой способ.
Еще один вопрос. Этот скрипт перечисляет все даты от DateTimePicker1 до DateTimePicker2.

WITH RECURSIVE dates(dateValue) AS (
VALUES({DateTimePicker1})
UNION ALL
SELECT date(dateValue, '+1 day')
FROM dates
WHERE dateValue < {DateTimePicker2}
)

Например я выбрал дату 01.01.2017 по 31.12.2017
Результат:
2017-01-01
2017-01-02
2017-01-03
2017-01-04
...
31.12.2017

Как переписать запрос чтобы результат выглядил вот так:

2017-01-01
2017-01-02
2017-01-03
2017-01-04
...
2017-01-31
Январь
2017-02-01
2017-02-02
2017-02-03
2017-02-04
...
2017-02-28
Февраль
2 мес //(тут будут отображаться данные за январь и февраль)
2017-03-01
2017-03-02
2017-03-03
2017-03-04
...
2017-03-31
Март
3 мес //(тут будут отображаться данные за январь, февраль и март)
...
31.12.2017
Декабрь
12 мес // (тут будут отображаться данные за год)

Помогите с реализацией. Спасибо заранее.

Re: Несколько вопросов 5

bemorhona-qt
как правило SQL запрос может вернуть только однородные данные, в вашем случае необходимо использовать Отчет, чтобы представить данные в желаемом виде.

Dmitry.

Re: Несколько вопросов 5

можете дать пример?

Re: Несколько вопросов 5

bemorhona-qt wrote:

можете дать пример?

К сожалению на создание данного примера у меня уйдет слишком много времени, т.к. он не совсем тривиальный, и так сходу я сам не знаю как это сделать, нужно думать )

Dmitry.

Re: Несколько вопросов 5

Уважаемый Дмитрий!

С начало пример:
WITH RECURSIVE dates(dateValue) AS (
  VALUES({DateTimePicker1})
  UNION ALL
  SELECT date(dateValue, '+1 day')
  FROM dates
  WHERE dateValue < {DateTimePicker2}
)

SELECT

"dateValue" as Сана,
( Select SUM(kat) from profile where
       (CASE WHEN {ComboBox1} =-1 then
        (CASE WHEN {ComboBox2} =-1 then 1=1 end) else
        (CASE WHEN {ComboBox2} =-1 then profile.id Between
         (Select Min(id) from profile where profile.id_department = {ComboBox1}) and
         (Select Max(id) from profile where profile.id_department = {ComboBox1})
        else profile.id= {Combobox2} end) end)
) as Катхо

FROM dates

В гриде в первом столбце Сана, во втором Катхо. Если например в скрипте писать вместо "as Катхо" - "as Кат Руз" то выдает ошибку. Т.е. после as должно быть одно слово, а надо чтобы было две или три. Как быть? Помогите пожалуйста.

Re: Несколько вопросов 5

попробуйте Кат Руз взять в кавычки, т.е.

"Кат Руз"
Dmitry.

Re: Несколько вопросов 5

Спасибо Дмитрий. Очень помогло.
Еще один нюанс в этом же разделе.
Приведу пример. На гриде имеется:

I № I   Кат руз дехоти I
  1               560
  2               350

Надо чтобы было:

I № I   Кат руз I
I      I  дехоти   I
  1         560
  2         350

Т.е. я хочу в место длинного заголовка колонки перенести часть него вниз. Надеюсь смог объяснить.

Re: Несколько вопросов 5

bemorhona-qt
Проект с примером:
http://myvisualdatabase.com/forum/misc. … download=1

Dmitry.