[ XGhost @ 23.03.2021. 14:08 ] @
Stvarno sam poceo da sumnjam u sebe, odnosno jel uopce imam pojma o programiranju
glup sam ogranicen ili sta vec ali stvarno je frustrirajuce.

prost kod ali ne radi

procedure TVitalwert.Button8Click(Sender: TObject);
var
danasnjidatum,staridatum:Tdatetime;
begin
danasnjidatum:=now;
staridatum:=Vitalwert_Querydatum.Value;
if staridatum < danasnjidatum then Button4.Enabled:=false else Button4.Enabled:=true;
if staridatum < danasnjidatum then Button5.Enabled:=false else Button5.Enabled:=true;
end;

dakle iako je u mysql bazu unesen podatak kao datum i iako ga kao takvog pozivam
ne konvertujuci u stringove ili sta ja znam zbog formata (da nebi i to bio problem)
jednostavno kod ne radi. Svrha koda bi bila da onemoguci promjenu i brisanje podataka
koji su stariji od dana unosa.
[ trimrd @ 23.03.2021. 14:41 ] @
Samo savjet kako da kraće pišeš:

Button4.Enabled := (staridatum < danasnjidatum);

A ovo sa datumima je vjerovatno problem u načinu kako mysql sprema datume. Nije to samo za mysql, svugje je to problem. Pogledaj šta dobiješ u .Value
[ XGhost @ 23.03.2021. 15:44 ] @
Citat:
trimrd: Samo savjet kako da kraće pišeš:

Button4.Enabled := (staridatum < danasnjidatum);

A ovo sa datumima je vjerovatno problem u načinu kako mysql sprema datume. Nije to samo za mysql, svugje je to problem. Pogledaj šta dobiješ u .Value


Zbog toga kako mysql sprema datume sam se i oslonio na Value sto bi trebalo da znaci da prikaze datum bez obzira u kojem formatu ga spremio. Isao sam logikom da
kako ga god spremio trebalo bi da ga prepozna da je stariji od danas tj trenutnog datuma.
[ savkic @ 23.03.2021. 16:40 ] @
Da li property Value vraca TDateTime ili Variant?
Ubaci jedan ShowMessage(DateTimeToStr(StariDatum)) pa vidi sta kaze;
[ XGhost @ 24.03.2021. 14:08 ] @
Rjesio sam ja to "Nekako". Sve ja to nekako rjesim ali je stvarno frustrirajuce to kukicanje
odnosno po meni pisanje nepravilnog koda.
Predhodno sam rjesio na brzinu, pisuci slijedecu proceduru:

procedure TKarton_pacijenta.Ogranicenje_Ispravke_Starijih_Datuma;
var
danasnjidatum,staridatum:Tdatetime;
DatumText1,DatumText2:String;
begin
danasnjidatum:=now;
FormatDateTime('MM/DD/YYYY', danasnjidatum);
staridatum:=DMObrasci.Karton_Pacijenta_Querydatum.Value;
FormatDateTime('MM/DD/YYYY', staridatum);

DatumText1:= DateToStr(danasnjidatum);
DatumText2:= DateToStr(staridatum);

if DatumText1=DatumText2 then Button4.Enabled:=true else Button4.Enabled:=false;
if DatumText1=DatumText2 then Button5.Enabled:=true else Button5.Enabled:=false;

end;

Prije toga sve provjerio kako je upisano u bazu, formatirao datume i opet nista.

Po meni je glupost, da ne nabrajam dalje nacin na koji sam to rjesio, pretvarajuci datume u string.

Medjutim, ako se nadjes u prilici da trazis posao, ili da prodas izvorni kod onda je nemoguce
objasniti hrpu nelogicnosti i gluposti na koje si prinudjen da bi rjesio neki problem.




[ savkic @ 24.03.2021. 17:43 ] @
Cudna mi je ova situacija, to treba da bude poredenje double vrednosti, i to uvek radi. da nije neki kod menjao FPU setovanja (tipa, Set8087CW)?

Sta ti prikaze, ShowMessage(DateTimeToStr(stariDatum))?
[ Milan Milosevic @ 26.03.2021. 15:05 ] @
Po meni je najbolje vreme i datume upisivati kao string nekog formata koji je tebi pogodan za kasniju obradu. Pa ga tako snimaš i vadiš iz baze i uvek znaš na čemu si.
[ ravni @ 26.03.2021. 16:55 ] @
Ako radis sam, mozda je tako stvarno najbolje
[ trimrd @ 29.03.2021. 15:43 ] @
Nije najbolje iz razloga SQL upita. Ako se već ide tim pristupom, onda bolje ostaviti podatak u formatu baze i dodati polje (calculated) koje formatira datum na način koji želimo.
[ Rapaic Rajko @ 30.03.2021. 08:35 ] @
Gledam kod iz prvog posta na temi.
Jedino sto mi pada na pamet je ovaj red

Code:

  staridatum:=Vitalwert_Querydatum.Value;


Mislim da je uvek bolje pozvati eksplicitnu konverziju

Code:

  staridatum:=Vitalwert_Querydatum.AsDateTime;


Nikad ne znamo kako ce compiler prevesti variant vrednost, zato je (valjda) bolje da mu direktno kazemo STA da radi.