Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.052 c
3-1168853695
zdm
2007-01-15 12:34
2007.04.01
График платежей


15-1173435430
alex-drob
2007-03-09 13:17
2007.04.01
Что за вирус?


1-1171001707
Choco
2007-02-09 09:15
2007.04.01
Изменить размер видео в MediaPlayer


15-1173294770
Servelat
2007-03-07 22:12
2007.04.01
Ftp server


15-1173164981
Чапаев
2007-03-06 10:09
2007.04.01
[гы] В Калифорнии победил ODF





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский