Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование дат: гггг-мм-дд и дд-мм-гггг. [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо