Witam,
mam problem z zapisem do bazy Daty w postaci 25-08-2014.
Już Ci inni pisali, że to bzdura. Nie zapisuje się daty w formacie "dd-mm-yyyy" ani w żadnym innym.
To jak jest data wyświetlana , zależy od ustawień wyświetlania (regionalnych) danego komputera i możesz to zmienić za pomocą globalnego rekordu System.SysUtils.FormatSettings
, ale o tym dalej...
Próbowałem różnych sposobów, ale mi nie wychodzi.
np:
var
MySettings: TFormatSettings;
s: string;
d: TDate;
begin
GetLocaleFormatSettings(GetUserDefaultLCID, MySettings);
MySettings.DateSeparator := '-';
MySettings.ShortDateFormat := 'dd-MM-yyyy';
s := DateToStr(DateTimePicker2.Date, MySettings); // pokazuje 25-08-2014.
d := StrToDate(s, MySettings); //25-08-2014.
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.ADD('Insert INTO DATA (Start_DATA) VALUES(:P1)');
IBQuery1.ParamByName('P1').AsDate:=d; // daje rezultat 2014-08-25
Żadne "daje rezultat".
Zrozum - wyświetlanie dat (i innych typów numerycznych) nie ma nic wspólnego z ich faktyczną reprezentacją. Nic a nic.
Skoro masz ustawiony format daty w systemie na yyyy-dd-mm
to tak będzie wyświetlać daty Twoja aplikacja.
Możesz zmienić format wyświetlania w systemie, co jest najgłupszym pomysłem.
Możesz ustawić format tylko dla Twojej aplikacji przez:
FormatSettings.ShortDateFormat := 'dd-mm-yyyy';
Wystarczy że ten kod uruchomisz raz na całą aplikację (np. podczas odczytywania ustawień) i już.
Ale to tez nie jest dobry pomysł. Dlaczego nie zostawisz formatu daty w spokoju?
Tak jak użytkownik sobie ustawił formaty danych, to niech tak ma.
IBQuery1.ExecSQL;
IBTransaction1.Commit;
end;
W DateTimepicker w ustawieniach FORMAT ustawiłem dd-MM-yyy.
Ma ktoś jakiś pomysł?
Proszę o pomoc.
No mam, a nawet kilka ;-)