Форум: "Базы";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Внизвставка даты в 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c