Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

вставка даты в Access   Найти похожие ветки 

 
makaronX   (2007-01-08 18:56) [0]

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

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


 
sniknik ©   (2007-01-08 19:21) [1]

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


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

спасибо, sniknik


 
MsGuns ©   (2007-01-08 20:38) [3]

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

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


 
Anatoly Podgoretsky ©   (2007-01-08 20:51) [4]

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

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


 
MsGuns ©   (2007-01-08 21:09) [5]

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

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

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


 
sniknik ©   (2007-01-08 21:31) [6]

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


 
palva ©   (2007-01-08 23:35) [7]

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


 
sniknik ©   (2007-01-08 23:55) [8]

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


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

ну вот пример
таблица с 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#

чего кажет?

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


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

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


 
Anatoly Podgoretsky ©   (2007-01-09 01:03) [11]

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


 
palva ©   (2007-01-09 01:37) [12]

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

{$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:39) [13]

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

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


 
palva ©   (2007-01-09 01:42) [14]

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


 
palva ©   (2007-01-09 01:50) [15]

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


 
sniknik ©   (2007-01-09 02:02) [16]

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 10:07) [17]

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


 
Anatoly Podgoretsky ©   (2007-01-09 15:23) [18]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
2-1173828969
Fantasy
2007-03-14 02:36
2007.04.01
Странно но факт. помогите понять


2-1173521890
ctudent
2007-03-10 13:18
2007.04.01
Банальный вопрос!


3-1168866075
Галинка
2007-01-15 16:01
2007.04.01
DataSet записать в физическую базу


15-1173523671
PZ
2007-03-10 13:47
2007.04.01
Соответствие С++ и Delphi


9-1143529208
Gleb
2006-03-28 11:00
2007.04.01
Нужно написать функцию которую при нажатии на кнопку выполняет