Chciałbym uodpornić aplikacje na ustawienia regionalne WINDOWS.
W pliku *.dpr wpisałem :
Application.UpdateFormatSettings:=False;
DateSeparator:='-'
DecimalSeparator :=','
ShortDateFormat := 'yyyy-mm-dd';
LongTimeFormat:='hh:nn:ss';
oraz funkcje DatetoStr zmieniłem na
function Date2String(pDT: TDateTime): String;
begin
if pDT=0 then
Result:=''
else
Result:=FormatDateTime('yyyy-mm-dd',pDT);
end;
Czy powyższe działania wystarczą ?
Drugi temat to DateTimePicker - mimo powyższych ustawień w dalszym
ciągu format daty jest pobierany z WINDOWS stosowałem komponenty
TdateTimerPicker oraz JvdateTimerPicker i mimo ustawienia formatu yyyy-
mm-dd rok i dzień pokazuje dobrze natomiast miesiąc jest w
dateTimePicker 45 a w jvDatetime Picker 9.
Co należy ustawić aby data była właściwa zgodna z ustawionym
formatem ?
> Chcia�bym uodporni� aplikacje na ustawienia regionalne WINDOWS.
Hmm, s� r�ne szko�y czy nale�y tak robi�, ja nale�� do tej liberalnej.
W ko�cu skoro kto� sobie skonfigurowa� format daty tak a nie inaczej w
systemie, to widocznie chce jej tak u�ywa�. A Ty mu chcesz narzuci� sw�j
format (czyli szko�a dyktatu)?
No chyba, �e chodzi o wsp�prac� z MSSQL-em - ale tutaj wystarczy u�ywa�
parametr�w, a nie dzierganiny typu sklejanie �a�cuch�w.
--
PaSkol
Quer.close;
Query.active :=False;
Query.sql.clear;
Query.sql.add()
Quer.open;
Query.active :=True;
niektóre warunki są dość "duże" i data jest tylko jedna ze składowych
warunku
Oprócz operacji na bazie w aplikacji dokonuje obliczeń na datach,
zapisu daty do pliku tekstowego (datetostr), odczyty daty z pliku
tekstowego (StrtoDate).
Najlepiej by było aby format daty dla użytkownika aplikacji był taki
sam jak ustawiony w Windows ale nawet pomiędzy WINDOWS XP a WINDOWS 7
są różnice w formacie daty.
Więc aby zabezpieczyć aplikacje przed wysypywaniem sie z powodu
formatów dat przyjąłem koncepcje ustalenia formatu daty dla aplikacji
z nadzieja że można to globalnie i "szybko" załatwić
Człowiek, naucz się trochę delphi najpierw... "Quer.Close();" i
"Query.Active := False;" robią dokładnie to zamo, i nie ma sensu się
powtarzać! podobnie "Open()" i "Active := True;".
> Query.sql.clear;
> Query.sql.add()
> Quer.open;
> Query.active :=True;
>
> niektóre warunki są dość "duże" i data jest tylko jedna ze składowych
> warunku
No i co z tego?
>
> Oprócz operacji na bazie w aplikacji dokonuje obliczeń na datach,
> zapisu daty do pliku tekstowego (datetostr), odczyty daty z pliku
> tekstowego (StrtoDate).
>
Ok.
> Najlepiej by było aby format daty dla użytkownika aplikacji był taki
> sam jak ustawiony w Windows ale nawet pomiędzy WINDOWS XP a WINDOWS 7
> są różnice w formacie daty.
Tak? A jakie różnice?
Zresztą program powinien być tak napisany żeby mu to nie przeszkadzało.
> Więc aby zabezpieczyć aplikacje przed wysypywaniem sie z powodu
> formatów dat przyjąłem koncepcje ustalenia formatu daty dla aplikacji
> z nadzieja że można to globalnie i "szybko" załatwić
Trzymaj się po prostu kilku zasad:
1) Datę i czas prezentuj użytkownikowi w standardzie aktualnego systemu
(DateToStr() i podobne)
2) Od użytkownika pobieraj datę w formacie systemu. Najlepiej mieć
specjalizowane kontrolki, które automatycznie parsuję i konwertują datę
na TDateTime.
3) Do plików roboczych (tam gdzie ludzie i tak sami nie będą edytować),
które muszą być przenośne pomiędzy użytkownikami i wersjami językowymi,
zapisuj date w swoim, łatwym do sparsowanie formacie. np
YYYYMMDD[hhmmss]. Napisz dobie funkcje do konwersji do i ze stringa w
tym formacie.
Ja do tego celu napisałem sobie funkcje zgodne z normą ISO 8601.
4) do bazy danych zawsze zapisuj datę za pomocą parametru Query, np tak:
Query.Sql.Text := 'update tabela set DataZmiany=:Data';
Query.ParamByName('Data').AsDateTime := Now();
Quer.Open();
lub select:
Query.Sql.Text := 'select * from tabela where DataZmiany <= :Data';
Query.ParamByName('Data').AsDateTime := ......;
Quer.Open();
--
Arivald
Więc troszke błedów popełniam a potem trzeba co nieco poprawiać.
Wolałbym w bazie nie trzymać dat jako string - troche za dużo do
przerobienia
PS.
A mnie jaki� czas temu pewien konsultant z BSC przekonywa�, �e poziom
grupy wzr�s� niepomiernie... No nie jestem przekonany... ;-)
--
wloochacz
Chodzi o to aby przekazywać daty jako parametry, a nie bezpośrednio w
SQL. Dzięki temu to sterownik bazy zajmie się niezbędnymi konwersjami.
--
Arivald
> PS.
> A mnie jaki� czas temu pewien konsultant z BSC przekonywa�, �e poziom
> grupy wzr�s� niepomiernie... No nie jestem przekonany... ;-)
Wiesz, bo wtedy to Ty monopolizowa�e� tu dyskusj�, wi�c chcia� Ci si�
podlizaďż˝ ;P.
--
PaSkol