![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование дат: гггг-мм-дд и дд-мм-гггг. [D5, Win2k]
Chery © (2004-11-29 13:39:00)Формат поля в БД объявлен как DateTime в формате гггг-мм-дд (MySQL), а делфи воспринимает дату в дд-мм-гггг. Как мне преобразовать дату из Делфи, чтобы ее можно было записать в базу ф формате гггг-мм-дд.
Chery (2004-11-29 18:48:00) [1]Да какой тут код: ДБГрид, DataSource1, ClientDataSet1.
После Пост делаю апдейт: clPrikaz_Student.ApplyUpdates(-1);
На сервере вставляю:
insert into Prikaz_Student
(Kod_Stud, N_Prikaza, Dte_Prikaza, Kod_Prikaza)
values
(:Kod_Stud, :N_Prikaza, :Dte_Prikaza, :Kod_Prikaza)
Не работает (не добавляет), но когда в BeforePost пишу
clPrikaz_Student.FieldByName('Dte_Prikaza').AsVariant:=Null;
То работает. Формат поля даты в базе DATETIME. СУБД: MySQL5, драйвер MyODBC-3.51.10.
simpson (2004-11-29 17:22:00) [2]Код показывай.
Chery (2004-11-29 17:17:00) [3]У меня не хочет записывать в базу из-за Даты. Ставлю дату в Null - записывает. Как не задаю - не записывает. И формат в МуСКЛ - DateTime. Но не хочет.
Chery (2004-11-29 17:15:00) [4]Ой, стоп, просто я тот же вопрос задавал в разделе БД. И там все сводилось к вопросу, указанному в теме. Теперь я вижу, что проблема в другом.
Chery (2004-11-29 17:10:00) [5]Да нигде не встречается, это я уже пробовал задавать явно\
clPrikaz_Student.FieldByName('Dte_Prikaza').AsVariant:='2004.11.11'; И наблюдал, как оно ее воспринимает как 11.11.2004 (Системный формат). Но я ставил системный формат yyyy-MM-dd. И вроде все воспринимает. Но Результат не удовлетворительный. Оно не хочет записывать в базу.
simpson (2004-11-29 16:53:00) [6]А в чем, собственно, трудность? Если уж так необходимо редактирование in-place, то, насколько я знаю, стандартный VCL-ный грид принимает дату в формате текущих региональных настроек системы, преобразует его к TDateTime и таким образом его передает связанному датасету.
А где тогда встречается это:
clPrikaz_Student.FieldByName('Dte_Prikaza').AsDateTime:=2004-09-20;
Chery (2004-11-29 16:45:00) [7]Что-то мне уже страшно...
Мидас: ClientDataSet1.
На сервере Query и Provider
simpson (2004-11-29 16:13:00) [8]Ты случаем не с аналогом TTable работаешь?
Chery (2004-11-29 16:03:00) [9]Пользователь сам вводит в ДВГрид, в удобном для нас формате дд.мм.гггг..
simpson (2004-11-29 15:20:00) [10]> Chery (29.11.04 14:59) [6]
> FieldByName('Dte_Prikaza').AsVariant:='2004.09.20';
Во-первых, не нужно работать через AsVariant - это медленне, чем через тот же AsDateTime. Во-вторых, не путай формат, в котором хранятся данные, и формат, в котором они отображаются - это разные вещи.
Откуда берется записываемое в базу значение даты?
Chery (2004-11-29 14:59:00) [11]тоесть, clPrikaz_Student.FieldByName('Dte_Prikaza').AsVariant:='2004.09.20';
Anatoly Podgoretsky (2004-11-29 14:48:00) [12]Chery (29.11.04 14:31) [3]
Это означает 2004 - 09 - 20; = 1975
simpson (2004-11-29 14:33:00) [13]> FieldByName('Dte_Prikaza').AsDateTime:=2004-09-20;
Ужас.
См. в хэлпе описание типа TDateTime.
Chery (2004-11-29 14:31:00) [14]Я че-то не совсем понял.FormatDateTime возвращает же строку.
Я пробую так:
clPrikaz_Student.FieldByName('Dte_Prikaza').AsDateTime:=2004-09-20; Но оно все равно пытается преобразовать в дд.мм.гггг.
Брат (2004-11-29 13:55:00) [15]ShortDateFormat:='yyyy.mm.dd';
IceBeerg (2004-11-29 13:54:00) [16]function FormatDateTime(const Format: string; DateTime: TDateTime): string;
+HELP