![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает простой запрос, говорит "несоответствие типов" [D7, XP]
Кирей © (2007-11-19 09:34:00)запрос вида:
SELECT DISTINCT KOD_CONT, DATA
FROM "12_2007\CONT_ZD.DBF"
WHERE
(DATA > '01/11/2007')
ORDER BY KOD_CONT, DATA
похоже (DATA > '01/11/2007') - строка с ошибкой, как написать правильно? Использую ADO.
Ditrix (2007-11-20 09:56:00) [1]спасибо
Anatoly Podgoretsky (2007-11-20 09:34:00) [2]> Ditrix (20.11.2007 09:27:21) [21]
Как раз наоборот, это причина получения не рабочего кода.
Используй параметры.
Ditrix (2007-11-20 09:27:00) [3]Anatoly Podgoretsky © (19.11.07 15:29) [19]
>>...русским программистам наплевать на форматы.
>>Формат определяется локализацией системы. Параметры избавлены от >>этой проблемы.
не дает покоя эта тема. :-\
а вариант DateToStr(Date) избавлен от проблеммы локализации?
т.е.
Query.SQL.Text:= Format('select * from table where date > "%s"',[DateToStr(Date)])
...у меня полно подобного кода...
Anatoly Podgoretsky (2007-11-19 15:31:00) [4]http://podgoretsky.com/DM/BadWillPoetry.html#BW-07
Anatoly Podgoretsky (2007-11-19 15:29:00) [5]Смотри про локализацию и форматы, что русским программистам наплевать на форматы.
Формат определяется локализацией системы. Параметры избавлены от этой проблемы.
ditrix (2007-11-19 15:23:00) [6]> Anatoly Podgoretsky © (19.11.07 14:54) [17]
а можно точнее ткнуть носом?
я неправ, видимо, в подходе в целом
а вот в чем именно?
Anatoly Podgoretsky (2007-11-19 14:54:00) [7]> Ditrix (19.11.2007 14:39:16) [16]
Неправильно полагаешь.
http://podgoretsky.com/DM/delphimaster.html
Ditrix (2007-11-19 14:39:00) [8][0]
BDE я полагаю?
(DATA > "01.11.2007")
такой формат даты должен пройти без проблем
palva (2007-11-19 13:47:00) [9]У меня работает, если дату заключить в скобки # #
Вот я кладу на форму компоненты DBGrid DataSource ADOQuery, сцепляю их,
Устанавливаю в ADOQuery ConnectionString =
Driver={Microsoft dBASE Driver (*.dbf)};Dbq=C:\Program Files\Common Files\Borland Shared\Data;
SQL = select FIRST_NAME from CLIENTS.DBF where DATE_OPEN=#10/23/1990#
После чего перевожу Active в True и у меня работает.
Johnmen (2007-11-19 11:34:00) [10]
> но я думал эта конференция для начинающих
Ты ещё заплачь.
Anatoly Podgoretsky (2007-11-19 11:08:00) [11]
> (DATA >cast('01/11/2007 00:00:00.000' as datetime))
Шило на мыло поменял, это делается автоматически без cast
Anatoly Podgoretsky (2007-11-19 11:08:00) [12]
> FROM "12_2007\CONT_ZD.DBF"
А он ССЗБ, за это время мог бы и намекнуть детали.
Reindeer Moss Eater (2007-11-19 11:02:00) [13]т. к. ему приходится заново подготавливать параметрические запросы, уже «выбитые» из кэша.
FROM "12_2007\CONT_ZD. DBF"
Desdechado (2007-11-19 11:01:00) [14]"Упростить" и "без параметров" неосуществимо в общем случае.
Годится только для SELECT * FROM tab
2.5.Использование параметрических запросов
Использование параметров в запросах является правилом хорошего тона в программировании, поскольку имеет множество положительных аспектов:
Улучшается читаемость и облегчается сопровождение кода программ.
При циклических выполнениях запроса с разными значениями параметров есть возможность «подготовить» запрос на сервере один раз, после чего он выполняется быстрее без необходимости «подготовки» на каждой итерации.
Исчезают ошибки, связанные с наличием апострофов, кавычек и неожиданных форматов даты внутри заданных пользователем текстовых строк в конструируемых «на лету» запросах.
Запросы, «подготовленные» сервером, хранятся некоторое время в кэше. Параметрический запрос хорош в этом случае тем, что он подходит для любых значений параметров такого же запроса, тогда как непараметрический – только для точно такого же, включая заданные в его теле (а не в параметрах) значения. Поэтому при совпадении «подготовка» не проводится, что для параметрического запроса это случается гораздо чаще, чем для непараметрического.
Непараметрические запросы тоже попадают в кэш, «выбивая» оттуда давно неиспользованные запросы (любого вида). Однако при большом потоке разнообразных запросов выбиваются и параметрические, которые имели шанс быть использованными далее, и заменяются непараметрическими, которые таких шансов не имеют. Это отрицательно сказывается на производительности сервера, т. к. ему приходится заново подготавливать параметрические запросы, уже «выбитые» из кэша.
Кирей (2007-11-19 11:00:00) [15]ладно, спасибо за помощь, за бубны, но я думал эта конференция для начинающих
sniknik (2007-11-19 10:50:00) [16]> По большому счету одно и то же
да ну?
> но хотелось бы все упростить, сочинил запрос и выполнил
без бубна не обойтись... см. "рекламу" выше.
либо сложный путь, учить, и применять возможности каждого движка отдельно и только к месту.
sniknik (2007-11-19 10:46:00) [17]> ошибка в имени функции, но все по науке:
т.е. это тебе наука говорит используй функции из одного SQL движка в другом? тогда нафиг такую науку, переходи на шаманство...
на правах рекламы, продаю бубны, оптом и в розницу. дорого. ;о))
Кирей (2007-11-19 10:44:00) [18]
> Используй параметры
> Я в прнципе дату заношу во временную таблицу, а потом уже
> отттудаd.DATA > d1.data, но хотелось бы сделать динамическое
> формирование запроса. Да и вообще почему не работает?
По большому счету одно и то же, запрос нормально работает, но хотелось бы все упростить, сочинил запрос и выполнил, без параметров и лишних таблиц.
Sergey13 (2007-11-19 10:39:00) [19]> [4] Кирей (19.11.07 10:35)
Не судьба попробовать
[1] Anatoly Podgoretsky © (19.11.07 09:37)
?
Кирей (2007-11-19 10:35:00) [20]привел в соответствие, не работает, - ошибка в имени функции, но все по науке:
(DATA >cast('01/11/2007 00:00:00.000' as datetime))