Autor Téma: DBGrid a vyznaceni radku podle datumu  (Přečteno 289 krát)

Offline Kony

  • Plnoletý
  • ***
  • Příspěvků: 160
  • Karma: 1
    • Verze Delphi: Delphi 7
DBGrid a vyznaceni radku podle datumu
« kdy: 07-11-2017, 20:11:41 »
Hoj, mam v programu DBGrid, ktery komunikuje pres DataSource a ZTable s MySQL Databazi. A v jednom poli mam datum a potreboval bych nejakou podminku, ze pokud je datum v policku mensi nez 7 dni tak se radek zabarvi do oranzova, pokud je datum totzny a nebo vetsi tak cervene atd....

Proste takto : mam databazi zakazniku a u nich datum splatnosti. A chtel bych aby se mi barevne odlisovali zakaznici kteri maji vse v poradku, kteri maji splatnost do 14ti dnu, kteri maji do 7 dnu a kteri maji po splatnosti


Dekuji mockrat za info

Datum v databazi mam ve tvaru Date a systemovy cas nacitam pres "StatusBar1.Panels[1].Text := DateToStr(now);"

Online Delfin

  • Hrdina
  • ****
  • Příspěvků: 368
  • Karma: 16
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #1 kdy: 07-11-2017, 20:40:07 »
Excellent
Rated 1 time
Jen principelne (jake podminky a barvy pouzijes uz je na tobe):

Kód: Delphi [Vybrat]
  1. uses
  2.   System.DateUtils;
  3.  
  4. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  5.   DataCol: Integer; Column: TColumn; State: TGridDrawState);
  6. begin
  7.   // pokud je pocet dni mensi nez 7, barvi se bunka oranzove
  8.   if DaysBetween(ZTable.FieldByName('MyDateField').AsDateTime, Date) < 7 then
  9.     TDBGrid(Sender).Canvas.Brush.Color := $000080FF;
  10.   // zavola se vychozi kreslici metoda bunky
  11.   TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
  12. end;
« Poslední změna: 07-11-2017, 20:47:15 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Kony

  • Plnoletý
  • ***
  • Příspěvků: 160
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #2 kdy: 07-11-2017, 21:04:42 »
no nikde nemuzu najit dcu System.DateUtils;


Lze vubec tohle pouzit pro Delphi 7 ???
« Poslední změna: 07-11-2017, 21:19:42 od Kony »

Online Delfin

  • Hrdina
  • ****
  • Příspěvků: 368
  • Karma: 16
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #3 kdy: 07-11-2017, 21:18:54 »
Moje chyba, mel jsem si precist jakou verzi mas :-[ V Delphi 7 je to jen DateUtils.
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Kony

  • Plnoletý
  • ***
  • Příspěvků: 160
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #4 kdy: 07-11-2017, 21:20:23 »
ted jsem to taky nasel :)))) diky moc

Online Ján Masaryk

  • Nováček
  • *
  • Příspěvků: 48
  • Karma: 5
    • Verze Delphi: 2010
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #5 kdy: 07-11-2017, 21:21:08 »
Excellent
Rated 1 time
To nerieš daj do uses iba DateUtils  ;)

Tiež som si to všimol, že v novších verziách Delphi podľa vzoru C++ sa deklarujú unity trochu inak.

Edit - tak ste ma predbehli :)
« Poslední změna: 07-11-2017, 21:28:59 od Ján Masaryk »

Offline Kony

  • Plnoletý
  • ***
  • Příspěvků: 160
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #6 kdy: 07-11-2017, 21:27:51 »
¨super funguje to suprove.. a jeste otazka.. lze jen obarvit pismo ??? A ne celou bunku ??

Online Ján Masaryk

  • Nováček
  • *
  • Příspěvků: 48
  • Karma: 5
    • Verze Delphi: 2010
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #7 kdy: 07-11-2017, 21:38:06 »
Excellent
Rated 2 times

Kód: Delphi [Vybrat]
  1. if DaysBetween(ZTable.FieldByName('MyDateField').AsDateTime, Date) < 7 then
  2. begin
  3.     TDBGrid(Sender).Canvas.Brush.Color := $000080FF;
  4.     TDBGrid(Sender).Canvas.Font.Color := clRed; // alebo definicia ako u Delfina
  5. end;
  6.  
« Poslední změna: 07-11-2017, 21:41:27 od Ján Masaryk »

Offline Kony

  • Plnoletý
  • ***
  • Příspěvků: 160
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #8 kdy: 07-11-2017, 21:45:33 »
Excellent
Rated 1 time
PERFEEEEKT.... Deeekuji moc

Offline Kony

  • Plnoletý
  • ***
  • Příspěvků: 160
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #9 kdy: 07-11-2017, 22:55:08 »
jeste prosim jedna otazka ....

co kdybych chtel obarvovat text podle pravidla

Kód: Delphi [Vybrat]
  1.   if DaysBetween(ZTable1.FieldByName('stav').xxxxxxxx) = 'aktivni' then
  2.     TDBGrid(Sender).Canvas.Font.Color := $009f9dff;
  3.   // zavola se vychozi kreslici metoda bunky
  4.   TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);

kde polozka STAV je STRING... a hodnota se meni na "aktivni", "neaktivni", "pozastaven"

jsem si to tedka precetl ten kod a je to blbost.. protoze tahle unita slouzi pouze pro datum.
« Poslední změna: 07-11-2017, 23:07:26 od Kony »

Online Delfin

  • Hrdina
  • ****
  • Příspěvků: 368
  • Karma: 16
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #10 kdy: 07-11-2017, 23:48:15 »
jeste prosim jedna otazka ....

co kdybych chtel obarvovat text podle pravidla

Kód: Delphi [Vybrat]
  1.   if DaysBetween(ZTable1.FieldByName('stav').xxxxxxxx) = 'aktivni' then
  2.     TDBGrid(Sender).Canvas.Font.Color := $009f9dff;
  3.   // zavola se vychozi kreslici metoda bunky
  4.   TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);

kde polozka STAV je STRING... a hodnota se meni na "aktivni", "neaktivni", "pozastaven"

jsem si to tedka precetl ten kod a je to blbost.. protoze tahle unita slouzi pouze pro datum.

Kód: Delphi [Vybrat]
  1. var
  2.   TheState: string;
  3. begin
  4.   TheState := ZTable1.FieldByName('stav').AsString;
  5.  
  6.   if TheState = 'aktivni' then
  7.     TDBGrid(Sender).Canvas.Font.Color := $009F9DFF
  8.   else
  9.   if TheState = 'neaktivni' then
  10.     TDBGrid(Sender).Canvas.Font.Color := clRed
  11.   else
  12.   if TheState = 'pozastaven' then
  13.     TDBGrid(Sender).Canvas.Font.Color := clBlue;
  14.  
  15.   TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
  16. end;

Dodam vsak, ze ukladani jakehokoli stavu jako retezec je neefektivni (i v tomto kodu se namisto prehledneho case switche pro vlastni nadefinovanou enumeraci vytvorilo spagetove monstrum). Mnohem lepsi je ukladat stav jako ordinalni hodnotu.
« Poslední změna: 07-11-2017, 23:51:36 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #11 kdy: 08-11-2017, 09:06:53 »
Excellent
Rated 2 times
Citace
Dodam vsak, ze ukladani jakehokoli stavu jako retezec je neefektivni
U mňa to je hrubá chyba v návrhu DB! Kvôli takým veciam mám definované samostatné tabuľky. V niektorých mám až dva záznamy. Dôvody prečo to je chyba:
  • to čo písal Defin o efektivite
  • čo sa stane, ak tie stavy budeš chcieť rozšíriť?
  • ak tie stavy rozšíriš, tak to asi budeš riešiť na viacerých miestach. Bŕŕŕ
  • užívateľ tam napíše/zadá hodnotu s preklepom. A už Ti to nefunguje. ´
Prečo samostatnú tabuľku (takzvaný "číselník"):
  • doplniť položku nie je žiaden problém
  • môže to robiť aj užívateľ
  • pri načítaní do (DB)ComboBox nič neriešiš
  • využiješ, že DB je relačná. Tým myslím to, že použiješ cudzí kľúč aj sa patričným obmedzením. Tým pádom tam nijako nedostaneš nesprávnu hodnotu
  • Ako spomínal Delfin využiješ konštrukciu case, ktorá je omnoho čitateľnejšia ako if - else. Preto bola vymyslená.
Aj preto si tieto veci nedefinujem v exe. Nikdy nevieš čo prinesie budúcnosť. Príklad: Pohlavie muž alebo žena. To sa predsa nemôže zmeniť. A už sa to v niektorých krajinách zmenilo. Pribudlo tretie pohlavie (transvestita či niečo také), ale jeho názov si nepamätám.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Nováček
  • *
  • Příspěvků: 25
  • Karma: 2
    • Verze Delphi: XE2

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1849
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #14 kdy: 08-11-2017, 16:04:40 »
V tomto případě to nastavím  na "NULL" 
Asi jen do doby, nez se tvym vyznamnym zakaznikem stane nejaka militantni she-male aktivistka ;-)
https://www.novinky.cz/zahranicni/evropa/427857-genderove-vyvazene-tehotenstvi-nerika-se-nastavajici-matka-ale-tehotny-clovek-radi-v-britanii.html

Jak pise SH, ja to mam v ciselniku, jehoz PK je enum a text prvni polozky v CS je JINÉ  a v nejhorším to v resource prepisu na neco jineho ;D

Uz za bolsevika jsem pred desitkami let musel prejmenovat svuj expertni system ze SEx (Supervisory Expert system) kvuli exportu elektraren do muslimskych zemi.
Tenkrat vyvoj prerusila sametova revoluce, takze uz si nedokazu vzpomenout, na co jsem to musel prejmenovat :'(
 

Offline Morrison

  • Plnoletý
  • ***
  • Příspěvků: 181
  • Karma: 6
    • Verze Delphi: D5, XE2
Re:DBGrid a vyznaceni radku podle datumu
« Odpověď #15 kdy: 08-11-2017, 18:20:49 »
Uz za bolsevika jsem pred desitkami let musel prejmenovat svuj expertni system ze SEx (Supervisory Expert system) kvuli exportu elektraren do muslimskych zemi.

Pročpak se společnost MND jmenuje Moravské Naftové Doly, když se tam těží ropa?  :)
nil

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: