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

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

вставка даты в Access [D6, Access]


makaronX ©   (2007-01-08 18:56:00) 

помогите победить:
adoquery1.SQL.Add('insert into baza values (' + labelededit2.text + ', ' + datetostr(datetimepicker1.Date) + и т. д.

при выполнени ругается на дату:
Число содержит синтаксическую ошибку в выражении запроса '08.01.2007'


Anatoly Podgoretsky   (2007-01-09 15:23:00) [1]

> palva  (09.01.2007 10:07:17)  [17]

А преданость у собак какая.


palva   (2007-01-09 10:07:00) [2]

> подамся ка я в дрессировщики собак
Это я согласен, с людьми много трудностей возникает.


sniknik   (2007-01-09 02:02:00) [3]

palva ©   (09.01.07 01:37) [12]
> Если # заменить на ', то "Несоответствие типов данных в выражении условия отбора"
sniknik ©   (08.01.07 23:55) [8]
> вот именно в этом конкретном случае ( insert) сойдет и строка

пост можно рассматривать как пример, сказанного о том что испортить можно все
sniknik ©   (08.01.07 23:55) [8]
> про "всеядность" jet-а?... ну относительную конечно (испортить все можно)

не, ну вот надо же, специально предупреждал "в этом конкретном случае", значит логично, что не в этом, не в конкретном работать не будет, и на тебе...

p.s. меня все чаще разочаровывают люди, подамся ка я в дрессировщики собак... они хотя бы понимают все как есть, буквально.


palva   (2007-01-09 01:50:00) [4]

sniknik ©   (09.01.07 00:08) [9]
Ваш INSERT действительно работает. Вот это для меня новость.


palva   (2007-01-09 01:42:00) [5]

Сейчас буду пробовать INSERT


Anatoly Podgoretsky   (2007-01-09 01:39:00) [6]

> palva  (09.01.2007 01:37:12)  [12]

Кто просил 4.10, просили пробовать с 4.30


palva   (2007-01-09 01:37:00) [7]

Я все-таки попробовал. Вот такой код:

{$APPTYPE CONSOLE}
uses ActiveX, ComObj, Variants;
var
 cn, rs: OleVariant;
begin
 CoInitialize(nil);
 cn := CreateOleObject('ADODB.Connection');
 cn.Open('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=db1.mdb;');
 rs := CreateOleObject('ADODB.Recordset');
 rs.Open('SELECT * FROM table1 Where f2 = #10/4/2006#', cn, 0, 1);
 WriteLn(rs.Fields.Item['f1']);
 ReadLn;
end.

Windows 2000, Локаль русская, Офис 2000 русский, MDAC 2.8, Turbo Delphi
В таблице запись с датой 4.10.2006. И этот код работает.
Если # заменить на ', то "Несоответствие типов данных в выражении условия отбора"
Если в дате поменять местами 4 и 10, то не находит ни одной записи (и, естественно, дает ошибку на следующей строке).
Так что я вынужден повторить:
Даты в SQL-предложениях акцесса нужно ограничивать символом #. Никакой Jet здесь не помогает.
Порядок "дата/месяц" должен быть американским даже если локаль требует иного задания.
То что этот порядок переворачивается для достижения валидности даты мне было известно, но я ведь с этим и не спорил.


Anatoly Podgoretsky   (2007-01-09 01:03:00) [8]

Можешь не пробовать, Акцесс весьма вольно обращается с датами


palva   (2007-01-09 00:30:00) [9]

sniknik ©   (09.01.07 00:08) [9]
Спасибо, сейчас посмотрю.


sniknik   (2007-01-09 00:08:00) [10]

ну вот пример
таблица с 3-мя полями, автоинкремент, строковое и дата тайм

делаем по очереди запросы
первый
INSERT INTO Table1 (Name, Dat) VALUES ('Test 1',"30.01.2007")
второй
INSERT INTO Table1 (Name, Dat) VALUES ("Test 2",'01.30.2007')

чего как думаешь в дату запишет?

можеш не гадать выполни и посмотри, ошибок не будет (не должно быть...)
как и от следующего
SELECT #30/01/2007#, #01-30-2007#

чего кажет?

параметры дают всетаки определенности поболе... к тому же и отрабатывает запрос с ними немного быстрей.
потому и советуют пользоваться именно ими.


sniknik   (2007-01-08 23:55:00) [11]

> А вы в курсе что даты в акцессе в командах SQL положено заключать в скобки типа # #
;о) а ты до этого, немного ранее, не читал пару постов про "всеядность" jet-а?... ну относительную конечно (испортить все можно), нет? ну тогда счас прочти, вот именно в этом конкретном случае (insert) сойдет и строка, сработает авто приведение типа.
и порядок может и зависеть и не зависеть от локальных установок, смотря какая дата будет и что приводится...
говорю же, уж слишком черезчур "всеяден", по мне так было бы лучше больше четкости и ошибки в сомнительных случаях, меньше проблем было бы... но не могу к сожалению влиять на разработчиков движка. ;о(


palva   (2007-01-08 23:35:00) [12]

> datetostr(datetimepicker1.Date)
А вы в курсе что даты в акцессе в командах SQL положено заключать в скобки типа # #, а не в апострофы? И порядок "месяц/день" должен быть американским вне зависимости от локальных установок.


sniknik   (2007-01-08 21:31:00) [13]

> Дело в том, что Джет жует и не давится от строчных дат.
даже слишком многим "не давится", а надо бы, т.к. гораздо лучше получить явную ошибку вот прям тут на месте, при написании, чем логическую и "через раз", не пойми когда/где "грянет".
и только потому что интерпретация даты в строке jet-том, почемуто отличается от того что ожидали/системных настроек...


MsGuns   (2007-01-08 21:09:00) [14]

Дело в том, что Джет жует и не давится от строчных дат.
Попробуйте

adoquery1.SQL.Add('insert into baza values (' + labelededit2.text + ', ' + QuotedStr(datetostr(datetimepicker1.Date) )+ и т. д.

Хотя справедливость [1] не отменяется ;)


Anatoly Podgoretsky   (2007-01-08 20:51:00) [15]

> makaronX  (08.01.2007 18:56:00)  [0]

Точно '08.01.2007', а не 08.01.2007


MsGuns   (2007-01-08 20:38:00) [16]

>sniknik ©   (08.01.07 19:21) [1]
>и вместо adoquery1 использовать adocommand1 в этом случае (insert ...).

Ну, в данном случае и квери сойдет. Хотя методологическинадо, конечно, как ты сказал ;)


makaronX   (2007-01-08 19:46:00) [17]

спасибо, sniknik


sniknik   (2007-01-08 19:21:00) [18]

использовать параметры и передавать датой, а не строкой, и вместо adoquery1 использовать adocommand1 в этом случае (insert ...).


Наверх

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