Формат даты при сохранении в MySQL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Олег
незнакомец
Сообщения: 5
Зарегистрирован: 30.03.2013 01:45:33

Формат даты при сохранении в MySQL

Сообщение Олег »

Подскажите, пожалуйста, как нужно сохранять и выводить в грид обратно поля типа Дата. У меня не получается, на форме ввожу 06.04.2013 (Компонент TDateEdit), сохраняю в базу запросом:

Код: Выделить всё

    SQLQueryWrite.SQL.Add('INSERT INTO persons (fio, age, district_id, address, dateopen) VALUES (:StrFIO, :StrDR, (SELECT district.id FROM district WHERE district.name = :StrDistrict), :StrAddress, :StrDateOpen);');
    SQLQueryWrite.Params.ParamByName('StrFIO').AsString:= StrFIO;
    SQLQueryWrite.Params.ParamByName('StrDR').AsString:= StrDR;
    SQLQueryWrite.Params.ParamByName('StrDistrict').AsString:= StrDistrict;
    SQLQueryWrite.Params.ParamByName('StrDateOpen').AsString:= StrDateOpen;
    SQLQueryWrite.Params.ParamByName('StrAddress').AsString:= StrAddress;
    SQLQueryWrite.ExecSQL;


а при выводе в гриде отображается дата как 20.04.2006. Что-то с форматами не то.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Олег писал(а):SQLQueryWrite.Params.ParamByName('StrDR').AsString:= StrDR;

StrDR должно быть в формате ГГГГ-ММ-ДД.
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

Для порядка в FormCreate установить

Код: Выделить всё

DateSeparator:='.';
ShortDateFormat:='dd.mm.yyyy';
ShortTimeFormat:='hh:mm:ss';


Для преобразования '21.12.2013' в '20131221' использую функцию

Код: Выделить всё

function DateToDBString(Str:String):String;
var
ss:array[1..3]of String [4];
i,j:Integer;
begin
ss[2]:='';ss[3]:='';
ss[1]:=Str[1];
j:=1;
 for i:=2 to utf8length(Str) do
  if Str[i]<>'.' then ss[j]:=ss[j]+Str[i] else
  inc(j);
 DateToDBString:=ss[3]+ss[2]+ss[1];
end;
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Олег
Почему у вас даты находятся в строках?
Для дат есть тип TDateTime.
Соответсвенно

Код: Выделить всё

SQLQueryWrite.Params.ParamByName('StrDateOpen').AsDateTime 
Олег
незнакомец
Сообщения: 5
Зарегистрирован: 30.03.2013 01:45:33

Сообщение Олег »

Спасибо всем за помощь!) Все получилось
Ответить