1 (edited by pha1984 2015-12-08 11:04:09)

Topic: SQL запрос

Ув. Дмитрий. Как можно в Form1.Label1.Caption вывести сколько ячеек в гриде окрашены в желтый цвет? В каждой строке грида окрашена одна ячейка по определнному условию.

Re: SQL запрос

Покажите пожалуйста код, который раскрашивает ячейки в желтый цвет.

Dmitry.

3 (edited by pha1984 2015-12-09 05:22:42)

Re: SQL запрос

procedure Form1_TableGrid1_OnChange (Sender: string);
var
   i, c, q, r: integer;
   sCell: string;
   DD, MM, YY, YYNow: word;
   dtBirth: TDateTime;
begin
    r := 0;
    q := 0;
    c := Form1.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        sCell := Form1.TableGrid1.Cells[4,i];
        if ValidDate(sCell) then
        begin
            DecodeDate(Now, YYNow, MM, DD);
            DecodeDate(StrToDate(sCell), YY, MM, DD);
            dtBirth := EncodeDate(YYNow, MM, DD);
            dtBirth := Trunc(dtBirth);

            if (Trunc(Now) - dtBirth) = -1 then
            begin
                Form1.TableGrid1.Cell[4,i].Color := clYellow;
       //         Showmessage('Пагох ' + (Trunc(Now) - dtBirth));
            end;
            if (Trunc(Now) - dtBirth) = 0 then
            begin
            Form1.TableGrid1.Cell[4,i].Color := clGreen;
            end;

        end;
    if Form1.TableGrid1.Cell[4,i] = clYellow then Inc(q);
    if Form1.TableGrid1.Cell[4,i] = clGreen then Inc(r);
    Form1.Label24.Caption:= 'Завтра у  ' +IntToStr(q)+ 'сотрудников день рождения';
    Form1.Label24.Caption:= 'Сегодня у ' +IntToStr(r)+ 'сотрудников день рождения';
    end;
end;

Это скрипт раскрашивает ячейки в желтый и в зеленый.

1. Если можно подскажите пожалуйста как дописать вот это:
Form1.Label24.Caption:= 'Завтра у ' + IntTostr() + сотрудников день рождения
Form1.Label25.Caption:= 'Сегодня у ' + IntTostr() + сотрудников день рождения
2. Рядом Label24 и Label25 стоит Panel1 и Panel2, цвета которых соответственно желтый и зеленый. При нажатии например Panel1 (желтый) выскачивает Panel3 в котором имеется грид2 и там должно быть все сотрудники день рождения которых наступит завтра. Таким же образом и при нажатии на Panel2. Есть вот такой скрипт, не знаю как его применить.
procedure Form1_Panel1_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.Panel3.Visible:= True;
    Form1.TableGrid2.dbFilter := ??????;
end;

Re: SQL запрос

procedure Form1_TableGrid1_OnChange (Sender: string);
var
   i, c, q, r: integer;
   iToday, iTomorrow: integer;
   sCell: string;
   DD, MM, YY, YYNow: word;
   dtBirth: TDateTime;
begin
    r := 0;
    q := 0;
    c := Form1.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        sCell := Form1.TableGrid1.Cells[4,i]; 
        if ValidDate(sCell) then
        begin
            DecodeDate(Now, YYNow, MM, DD);
            DecodeDate(StrToDate(sCell), YY, MM, DD);
            dtBirth := EncodeDate(YYNow, MM, DD);
            dtBirth := Trunc(dtBirth);

            if (Trunc(Now) - dtBirth) = -1 then
            begin
                Form1.TableGrid1.Cell[4,i].Color := clYellow;
                Inc(q);
       //         Showmessage('Пагох ' + (Trunc(Now) - dtBirth));
            end;
            
            if (Trunc(Now) - dtBirth) = 0 then
            begin
                Form1.TableGrid1.Cell[4,i].Color := clGreen;
                Inc(r);
            end;

        end;
    end;

    Form1.Label24.Caption:= 'Завтра у  ' +IntToStr(q)+ 'сотрудников день рождения';
    Form1.Label24.Caption:= 'Сегодня у ' +IntToStr(r)+ 'сотрудников день рождения';
end;

на счет панелек, не совсем ясно что к чему.

Dmitry.

Re: SQL запрос

повторюсь еще раз, на форме имеется грид1, в котором имеются сотрудники и чьи дни рождения окрашиваются в желтый и зеленый цвета.
Также на форме имеется панел1, панел2 и панел3. Цвет панел1 окрашена желтым, цвет панел2 - зеленым. В панеле3 имеется грид2. Панел3 невидим. При нажатии на панел1 появляется панел3 и в гриде2 должно появиться сотрудники у которых день рождения наступит завтра. Аналогично при нажатии на панел2 появляется панел3 и в гриде2 должно появиться сотрудники у которых день рождения сегодня.

Re: SQL запрос

Я не понимаю, причем тут панели? Вопрос о панелях или о датах?

Dmitry.

Re: SQL запрос

DriveSoft wrote:

Я не понимаю, причем тут панели? Вопрос о панелях или о датах?


вопрос и о панелях и о датах, смотрите скриншот

Post's attachments

Attachment icon 1.JPG 169.74 kb, 240 downloads since 2015-12-12 

Re: SQL запрос

смотрите также второй рисунок

Post's attachments

Attachment icon 2.JPG 180.58 kb, 233 downloads since 2015-12-12 

Re: SQL запрос

К сожалению в данном случае нет простого способа это реализовать.

Dmitry.

10 (edited by pha1984 2015-12-13 08:36:19)

Re: SQL запрос

procedure Form1_TableGrid1_OnChange (Sender: string);
var
   i, c, q, r: integer;
   iToday, iTomorrow: integer;
   sCell: string;
   DD, MM, YY, YYNow: word;
   dtBirth: TDateTime;
begin
    r := 0;
    q := 0;
    c := Form1.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        sCell := Form1.TableGrid1.Cells[4,i];
        if ValidDate(sCell) then
        begin
            DecodeDate(Now, YYNow, MM, DD);
            DecodeDate(StrToDate(sCell), YY, MM, DD);
            dtBirth := EncodeDate(YYNow, MM, DD);
            dtBirth := Trunc(dtBirth);

            if (Trunc(Now) - dtBirth) = -1 then
            begin
                Form1.TableGrid1.Cell[4,i].Color := clYellow;
                Inc(q);
       //         Showmessage('Пагох ' + (Trunc(Now) - dtBirth));
            end;
           
            if (Trunc(Now) - dtBirth) = 0 then
            begin
                Form1.TableGrid1.Cell[4,i].Color := clGreen;
                Inc(r);
            end;

        end;
    end;

   
Можете хотя бы дать пример как сделать этот скрипт в вычислительном поле чтобы в точности определил по дням?
Например
Date('now')-DateofBirth=-1
Date('now')-DateofBirth=0

Re: SQL запрос

вы можете использовать дананое выч. поле

CASE
    WHEN strftime('%d.%m', 'now') = strftime('%d.%m', dateofbirth) THEN 0
    WHEN strftime('%d.%m', 'now', '+1 day') = strftime('%d.%m', dateofbirth) THEN 1
    ELSE NULL
END

оно вернет 0, если день рождение сегодня
и вернет 1 если день рождение завтра


по данному выч. полю вы можете фильтровать записи использую компонент TextBox и кнопку Поиск, т.о. показать записи у кого сегодня ДР или завтра

Dmitry.

Re: SQL запрос

Спс Дмитрий. Вы мне очень помогли с подсказкой. Все получилось как я хотел. Еще раз спс.