![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Забавный формат даты в базе Access [Access]
Pipl © (2004-07-02 12:50:00)Добрый день, всем!
Данные храню в Accesse, использую ADOQuery. формат ячейки в табле Access: краткий формат даты. При сохранении в базу данных беру дату из DateTimePicker.Date, а когда выбираю данные по дате запросом, дату в запросе привожу к виду: #02/07/2004#. Данные не выбираютсяиз базы, при запросе данных в Пикере поставил на первое место месяц, получил в запросе: #07/02/2004# данные отображаются. А когда дата больше 13: #13/07/2004#, то выбираются данные нормально. Как исправить данную проблемму?
Спасибо!
N.B. В самой таблице Access вид даты 02.07.2004
Anatoly Podgoretsky (2004-07-02 14:21:00) [1]sniknik © (02.07.04 14:15) [20]
Он ничего не пишет про движок, подозреваю, что это JET, так он достаточно интеллектуальный, что бы исправить неверно поданые ему форматы, когда это одназначно, а это одназначно для #13/07/2004#
Pipl (2004-07-02 14:17:00) [2]>sniknik ©
смышлёный ты парень!!! чуток поковыряв эти грёбаные параметры с твоим запросом, всё получилось, правда я ещё не понял почему и как, но еще не полночь.
СПАСИБО.
N.B. но если придумаешь как упростить - без параметров(или всё таки в чём была пробля) то буду еще более признателен.
sniknik (2004-07-02 14:15:00) [3]Anatoly Podgoretsky
да не важно сдесь какой это формат, во к примеру такой запрос
SELECT #13/07/2004#, #07/13/2004#
выдаст два значения с одной(!!!) датой. одна (неважно какая) будет в правильном формате, а вторая скорректируется (месяц поменяется с днем).
(и это еще цветочки по сравнению с тем что функция CDate делает ;о))
во так вот оно работает... ;о) (меня это всегда раздражало, лутше бы ошибку преобразования выдавал)
Anatoly Podgoretsky (2004-07-02 14:06:00) [4]По внешнему виду это американский формат.
Anatoly Podgoretsky (2004-07-02 14:05:00) [5]Pipl (02.07.04 13:54) [16]
Тогда все должно работать, но у меня большое сомнение, что твое преобразование соответствует формату, особенно это видно из более ранних твоих сообщений.
sniknik (2004-07-02 14:03:00) [6]> у меня запрос выглядит так:
> ...CommandText:='Select * from TblNomera where DataPrihod =' + data_prihod +' And Sklad ='+Label15.Caption +'';
> ежели кому интересно
тебе, должно быть
меняеш на параметры
...CommandText:='Select * from TblNomera where DataPrihod=:DataPrihod And Sklad=:Sklad';
их значения присваиваеш перед выполнением запроса.
Pipl (2004-07-02 13:54:00) [7]>Anatoly Podgoretsky ©
data_prihod из DateTimePicker.Date привожу к виду: #02/07/2004#
ответ: да, согласно описаниям формата данных даты Access'a
Anatoly Podgoretsky (2004-07-02 13:46:00) [8]data_prihod соответствует текущему формату твой базы данных?
Pipl (2004-07-02 13:44:00) [9]>sniknik ©
спасибо за помошь, хоть и такую (F1),
у меня запрос выглядит так:
...CommandText:='Select * from TblNomera where DataPrihod =' + data_prihod +' And Sklad ='+Label15.Caption +'';
ежели кому интересно
sniknik (2004-07-02 13:37:00) [10]> самой базе Access'а сделал запрос по дате, отображает данные все правильно, за 02.07.2004.
дата это число, а как это число интерпретировать/конвертировать из/в текст(а) зависит от программы/программиста
> можно тут плз по подробнее, какие параметры?
обычные ADODataSet.Parameters + F1
Anatoly Podgoretsky (2004-07-02 13:33:00) [11]Pipl (02.07.04 13:27) [10]
Так "Данные храню в Accesse"
Pipl (2004-07-02 13:29:00) [12]>sniknik ©
>чтобы избежать неоднозначности используй параметры.
можно тут плз по подробнее, какие параметры?
СПАСИБО
Pipl (2004-07-02 13:27:00) [13]> Anatoly Podgoretsky ©
спрашиваю про варианты решения проблеммы а не про Access или Windows, в самой базе Access'а сделал запрос по дате, отображает данные все правильно, за 02.07.2004.
sniknik (2004-07-02 13:27:00) [14]> Его настройки и справку по нему смотри.
в этом случае не поможет, нормальное поведение движка Jet, если дата введена в неправильном формате первым делом идет попытка преобразования на возможность того что спутали мемяц и день, ошибка выдается только если и преобразованный формат датой не является.
(в справке описания такого поведения не находил, видимо комуто само собой разумеющееся ;о)
чтобы избежать неоднозначности используй параметры.
Anatoly Podgoretsky (2004-07-02 13:17:00) [15]Pipl (02.07.04 13:12) [7]
А спрашиваешь про Акцесс, а не про Виндоус. Его настройки и справку по нему смотри.
Pipl (2004-07-02 13:12:00) [16]> Anatoly Podgoretsky ©
первым делом я проверил региональные настройки в Винде(XP), нормальные русские деревянные рубли :) и краткий формат даты.
Anatoly Podgoretsky (2004-07-02 13:09:00) [17]Pipl (02.07.04 13:02) [4]
Потому что ты использовал американский формат даты MM/DD/YYYY
Курдль (2004-07-02 13:07:00) [18]
> Pipl (02.07.04 12:58) [2]
> >Курдль ©
> я не программист по натуре, начитан не много, можно по подробнее
> про параметрические запросы, или где почитать?
> Спасибо!
Почитать в любой книжке по БД + Делфи (динамические запросы).
Query1.SQL.Text := 'select * from TABLE_1 where FLD_DATE = :PAR_DATE';
Query1.ParamByName('PAR_DATE').AsDateTime := Date;
Pipl (2004-07-02 13:02:00) [19]>Anatoly Podgoretsky ©
согласен данных нет, база свежая, но высвечиваются данные при запросе на 07.02.2004 за 02.07.2004 я проверял.
Anatoly Podgoretsky (2004-07-02 12:59:00) [20]Это значит лишь одно, у тебя нет данных на 7.02.2004