Topic: SQL запрос
Ув. Дмитрий. Как можно в Form1.Label1.Caption вывести сколько ячеек в гриде окрашены в желтый цвет? В каждой строке грида окрашена одна ячейка по определнному условию.
My Visual Database → Russian → SQL запрос
Ув. Дмитрий. Как можно в Form1.Label1.Caption вывести сколько ячеек в гриде окрашены в желтый цвет? В каждой строке грида окрашена одна ячейка по определнному условию.
Покажите пожалуйста код, который раскрашивает ячейки в желтый цвет.
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;
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;
на счет панелек, не совсем ясно что к чему.
повторюсь еще раз, на форме имеется грид1, в котором имеются сотрудники и чьи дни рождения окрашиваются в желтый и зеленый цвета.
Также на форме имеется панел1, панел2 и панел3. Цвет панел1 окрашена желтым, цвет панел2 - зеленым. В панеле3 имеется грид2. Панел3 невидим. При нажатии на панел1 появляется панел3 и в гриде2 должно появиться сотрудники у которых день рождения наступит завтра. Аналогично при нажатии на панел2 появляется панел3 и в гриде2 должно появиться сотрудники у которых день рождения сегодня.
Я не понимаю, причем тут панели? Вопрос о панелях или о датах?
Я не понимаю, причем тут панели? Вопрос о панелях или о датах?
вопрос и о панелях и о датах, смотрите скриншот
смотрите также второй рисунок
К сожалению в данном случае нет простого способа это реализовать.
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
вы можете использовать дананое выч. поле
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 и кнопку Поиск, т.о. показать записи у кого сегодня ДР или завтра
Спс Дмитрий. Вы мне очень помогли с подсказкой. Все получилось как я хотел. Еще раз спс.
My Visual Database → Russian → SQL запрос
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi