Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FAQ. Передача DateTime в Access / 4 сообщений из 4, страница 1 из 1
18.10.2003, 14:35
    #32297417
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FAQ. Передача DateTime в Access
Решил я, наконец, окончательно разобраться с передачей даты в запрос к Access из Delphi Что скажете по поводу ниже написанного?


FAQ. Передача значения поля DateTime в запрос к базе Access.

Win 98 rus. Delphi 6.0. Jet 4.0 MDAC 2.7 rus. Access XP rus. База «Борей».

1. Использование строковой константы.
Независимо от того, используется ли Jet или ODBC, дата должна быть представлена в формате MM/DD/YYYY.
В качестве разделителя могут быть использованы точка, слэш и тире.


ADODataSet1.CommandText:=
'select * from Заказы where ДатаРазмещения<= #03.04.1998# order by ДатаРазмещения DESC';

Тут есть ловушка. Правильно будут обрабатываться и даты вида #31/03/1998#, т.е. те, в которых можно однозначно опознать, где дни, а где месяцы.

2. Использование функций преобразования в запросе
Работа через Jet
Дата должна быть представлена в формате краткой региональной настройки даты компьютера. В качестве разделителя могут быть использованы точка, слэш и тире.


d:='03.04.1998';
ADODataSet1.CommandText:=
'select * from Заказы where ДатаРазмещения<= datevalue("'+d+'") order by ДатаРазмещения DESC';


Ловушка та же самая.

Работа через ODBC

d:='1998-05-06';
ADODataSet1.CommandText:=
'select * from Заказы where ДатаРазмещения<= {d '+quotedstr(d)+'} order by ДатаРазмещения DESC';

Формат даты только YYYY-MM-DD

3. Использование запроса с параметром

Работа через Jet.
Необходимо преобразовать дату в строку и воспользоваться функцией DateValue
Не зависит от региональных настроек даты.


dt:=date;
ADODataSet1.CommandText:=
'select * from Заказы where ДатаРазмещения<= datevalue(:D) order by ДатаРазмещения DESC';
ADODataSet1.Parameters[0].Value:=DateToStr(dt);


Работа через ODBC

dt:=StrToDate('06.05.1998');
Не зависит от региональных настроек даты.
ADODataSet1.CommandText:=
'select * from Заказы where ДатаРазмещения<= :D order by ДатаРазмещения DESC';
ADODataSet1.Parameters.ParamByName('D').Value:=dt;
...
Рейтинг: 0 / 0
20.10.2003, 11:06
    #32298072
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FAQ. Передача DateTime в Access
Сколько пробовал, а самый надежный способ - параметром дату передавать именно как дату. В Д5 вроде так не прокатывает, но у меня Д6 :).
...
Рейтинг: 0 / 0
20.10.2003, 11:47
    #32298144
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FAQ. Передача DateTime в Access
по поводу правильности ничего не скажу (не работал), но написано весьма понятливо и доходчиво
...
Рейтинг: 0 / 0
20.10.2003, 21:31
    #32299113
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FAQ. Передача DateTime в Access
Papka. FAQ-то по Access. В него датой из Delphi передать в принципе невозможно. Вот для MS SQL – можно. Но по MS SQL есть свои факи.

Ну ладно, если замечаний нет, посылаю в раздел
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FAQ. Передача DateTime в Access / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]