Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизНе выполняется удаление из Access через ADO Найти похожие ветки
← →
chsv © (2005-10-31 08:22) [0]В своей программе я использую базу Access через ADO(ADO v2.7,WinXP Professional без SP, Access 2003, D5).
Пытаюсь выполнить следующий код:
Листинг 1:
----------
with FADOCommand do begin
CommandText := "DELETE * FROM RcvValT WHERE DateTimeParam < "#10/29/200514:32:07"";
Prepared := True;
Execute();
end;
И - нифига! :( То есть при выполнении запроса не пишется об ошибке, но удаление
не выполняется. Причем что интересно -- если в WHERE указать поле, например, целого типа
(не дата/время), то удаление выполняется!
Попробовал составить запрос в построителе запросов Access, скопировать его в свою программу.
Результат тот же -- не работает!
Из положения выкрутился следующим образом:
Листинг 2:
----------
with FADOCommand do begin
CommandText := format(
"DELETE * FROM RcvValsT "
+ "WHERE DateDiff("s","01.01.1970 0:0:0",[DateTimeParam]) < %d",
[ Round((StrToDateTime("31.10.2005 12:10:07")
- StrToDateTime("01.01.1970 0:0:0")) * 24 * 60 * 60)]);
Prepared := True;
Execute();
end;
Однако хотелось бы узнать -- можно ли все-таки удалить данные способом, представленным в Листинг 1? Что я делал не так или что нужно сделать, чтобы получилось так? ;))
Заранее благодарен.
← →
chsv © (2005-10-31 08:24) [1]Очепятка! :(( Личтинг 1 выглядит следующим образом:
Листинг 1:
----------
with FADOCommand do begin
CommandText := "DELETE * FROM RcvValT WHERE DateTimeParam < #10/29/2005 14:32:07";
Prepared := True;
Execute();
end;
← →
chsv © (2005-10-31 08:26) [2]:)))))))))))))))))))))))))))))))))))))))))))))))))
Листинг 1:
----------
with FADOCommand do begin
CommandText := "DELETE * FROM RcvValT WHERE DateTimeParam < #10/29/2005 14:32:07#";
Prepared := True;
Execute();
end;
← →
sniknik © (2005-10-31 08:46) [3]chsv © (31.10.05 08:26) [2]
это должно работать. но для устранения разных недоразумений с путаницей дат замени строку с датой на параметр.
то что путаница будет это точно, уже есть. так по русской настройке день идет первым, но если преобразование не состоялось аксесс меняет их местами. т.е. сейчас пока день 29 у тебя однозначная дата а вот при 11/01/2005 это уже будт не 1 число 11 месяца а 11 1го. при русских настройках.
Prepared := True;
это можно убрать. лишнее.
← →
chsv © (2005-10-31 08:55) [4]"Должно работать". Так не работате ведь, или, точнее, работает, но непарвильно. У меня такое впечателение, что дата понимается (раз сообщения об ошибке нет), но не так, как я задал ее.
← →
chsv © (2005-10-31 08:59) [5]Причем в моем-то случае (когда не работает) неоднозначности число-месяц нет
← →
sniknik © (2005-10-31 09:15) [6]> "Должно работать". Так не работате ведь, или, точнее, работает, но непарвильно.
значит ошибка за пределами показанного кода.
> У меня такое впечателение, что дата понимается (раз сообщения об ошибке нет), но не так, как я задал ее.
возможн. чтото типа такого я и предполагал под недоразумениями с путаницей дат.
> Причем в моем-то случае (когда не работает) неоднозначности число-месяц нет
форматов много, может вообще воспринимать дату не по григорианскому календарю...
вообще если используеш строку то хотябы формат выбери однозначный, вроде такого #2005-10-29 14:32:07#, и все одно меняй на параметр, они кроме того еще и быстрее работает.
(есть недоразумения и с ним, но это не от механизма параметров а от того что используется вариант для передачи...)
← →
chsv © (2005-10-31 14:24) [7]> вообще если используеш строку то хотябы формат выбери однозначный,
> вроде такого #2005-10-29 14:32:07#
Гм... А в формате 2005-10-29 месяц с числом нельзя перепутать что-ли? ;))
← →
Anatoly Podgoretsky © (2005-10-31 14:36) [8]chsv © (31.10.05 14:24) [7]
Ответ был про одназначность, а не про путаницу, а перепутать можно что угодно.
← →
chsv © (2005-10-31 15:51) [9]Однозначность -- от "одно значение". Путаница возникает все-таки когда значений может быть больше одного ;))) Так что все что угодно не перепутаешь. Например, когда что-то только одно. Не с чем путать... ;)) Он тоже не про однозначный формат говорит. Поэтому я так и ответил.
← →
sniknik © (2005-10-31 16:30) [10]> Гм... А в формате 2005-10-29 месяц с числом нельзя перепутать что-ли? ;))
а ты попробуй
SELECT #2005-10-29 14:32:07# - что сдесь
SELECT #2005-29-10 14:32:07# - и что сдесь
а потом, сравни это
SELECT #10/29/2005 14:32:07#, #29/10/2005 14:32:07#
а после скажи, можно перепутать?
просто твой вариант, зависящий от локализации/настроек, при путанице ты не получиш ошибок, а получиш логически неверные данные.
а мой (вообще то мой, это параметры, ну будем считать условно мой ;), более строгий (стандарт ODBC), и ты либо получаеш верно, либо "получаеш в нос"
> Так что все что угодно не перепутаешь.
ну да. а почему ты уже перепутал? вот настанет первое/2/3.../12 число(не 29-е) и проверь, что с твоим запросом.
← →
sniknik © (2005-10-31 16:34) [11]да. опять повторюсь, что это все
sniknik © (31.10.05 08:46) [3]
> ... при русских настройках.
будучи обладателем английской винда без MUI, или настроенной в английском стиле, все задано верно... до того момента пока программа не "перекочует" юзеру с русской настройкой.
вот это и есть неоднозначность. ;о))
← →
chsv © (2005-10-31 16:37) [12]про то, что если число 29, ясно, что с месяцем его не перепутаешь!
← →
chsv © (2005-10-31 16:39) [13]а про то, что 2005-01-02 -- второе января это или первое февраля -- вопрос открытый.... ;))
← →
sniknik © (2005-10-31 16:57) [14]> а про то, что 2005-01-02 -- второе января это или первое февраля -- вопрос открытый.... ;))
для тебя может быть. но вообще закрытый, это однозначно(!!!) 1 января 2 число.
по моему ты не пробовал предлагаемых запросов... а вот в случае с локализацией это зависит от многих факторов.
p.s. в четвертый раз повторять не буду.
← →
chsv © (2005-11-01 07:41) [15]> для тебя может быть. но вообще закрытый, это однозначно(!!!) 1 января 2 > число.
Кто это узаконил, можно узнать? Ты? ;)))
← →
sniknik © (2005-11-01 07:49) [16]sniknik © (31.10.05 16:30) [10]
> ... более строгий (стандарт ODBC) ...
← →
app © (2005-11-01 09:09) [17]chsv © (01.11.05 07:41) [15]
Будешь огрызаться - ветку закрою.
← →
chsv © (2005-11-01 09:37) [18]да пожалуйста
← →
chsv © (2005-11-01 09:41) [19]Удалено модератором
Примечание: Мат и нападки на модератора, три дня РО
← →
chsv © (2005-11-01 09:43) [20]Удалено модератором
← →
chsv © (2005-11-01 09:44) [21]Удалено модератором
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.016 c