![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос к Access через ADO дату в строку [D7, Access]
s77 © (2005-11-30 12:03:00)Как поле даты в запросе преобразовать в строку
хотелось бы даты сравнивать в строковом формате, а то c Null'ами проблемы
s77 (2005-11-30 14:40:00) [1]
> А зачем datetostr(DateTimePicker5.Date)? У тебя поле какого
> типа?
дело в том что тип значения параметра передаваемого в access может быть только ftDateTime, - cnfdk. ftDate а он сам переводит в ftDateTime, а он идет со временем DateTimePicker5.Date - получается дата и время которое мне не нужно и с ним вообще сравнения не получается
> Если в Edit19.Text нет % то смысл Like теряется. Может тут
> причина.
> Зачем тебе or (name is null and :name is null) если параметр
> NULL-ом никогда не бывает?
все написано правильно и работает как надо для текстового поля
s77 (2005-11-30 14:40:00) [2]- cnfdk. = ставлю
Sergey13 (2005-11-30 13:08:00) [3]2[11] s77 (30.11.05 12:32)
Зачем тебе or (name is null and :name is null)если параметр NULL-ом никогда не бывает?
2[12] s77 (30.11.05 12:38)
>выход - в базе сделать поля дат текстовыми
Нет. Выход - правильно писАть программы. 8-)
Sergey13 (2005-11-30 12:42:00) [4]А зачем datetostr(DateTimePicker5.Date)? У тебя поле какого типа?
>trim(Edit19.Text);
Если в Edit19.Text нет % то смысл Like теряется. Может тут причина.
s77 (2005-11-30 12:38:00) [5]выход - в базе сделать поля дат текстовыми - но волнует меня как будет работать поис по диапазону например показать тех у кого дата с 11.02.2004 до 02.10.2005
s77 (2005-11-30 12:32:00) [6]Запрос
select * from main_table where
((name like :name) or (name is null and :name is null)) and
((pass_vyd=:pass_vyd and :pass_vyd is not null) or (:pass_vyd is null))
Передача параметров
ADOQuery1_select_some.Close;
if trim(Edit19.Text)='' then ADOQuery1_select_some.Parameters.ParamByName('name').Value:='%'
else ADOQuery1_select_some.Parameters.ParamByName('name').Value:=trim(Edit19.Text);
if DateTimePicker5.Checked then
ADOQuery1_select_some.Parameters.ParamByName('pass_vyd').Value:=datetostr(DateTimePicker5.Date)
else ADOQuery1_select_some.Parameters.ParamByName('pass_vyd').Value:=null;
соответственно name строковое поле
pass_vyd дата
Sergey13 (2005-11-30 12:28:00) [7]Может таки свой запрос опубликуешь?
s77 (2005-11-30 12:26:00) [8]неа, не работает в любом случае выдает все записи и когда передаю дату и когда передаю нулл
Sergey13 (2005-11-30 12:22:00) [9]((data=:data and :data is not null) or (:data is null))
s77 (2005-11-30 12:18:00) [10]
> А ты дату с Like тоже ищешь?
по всякому пробовал :)
s77 (2005-11-30 12:17:00) [11]тогда помогите написать чтобы когда я ищу дату - выводилось только точное совпадение с ней, а когда передаю в параметр нулл (поиск без учета даты) чтоб выводились все
(с текстовыми полями работает а с датами нет см. мой пример выше, только передаю не нулл а %)
Sergey13 (2005-11-30 12:16:00) [12]А ты дату с Like тоже ищешь?
s77 (2005-11-30 12:13:00) [13]ну как бы сравнивал - формат то одинаковый
есть же функция на стороне delphi datetostr
в оракле например есть функция to_char(дата, формат вывода даты)
что же касается сравнения с null ом мне тут уже подсказали
например сравнение по полю name кот. может быть null ом
((name like :name) or (name is null and :name is null))
с датой работает не правильно - кода передаю в параметр дату (не нулл) - цепляет из таблицы и нужную дату (если она есть) и пустые строки
Anatoly Podgoretsky (2005-11-30 12:11:00) [14]А как ты NULL то преобразуешь в строку?
Desdechado (2005-11-30 12:07:00) [15]а с NULL сравнивать только IS NULL или IS NOT NULL
Sergey13 (2005-11-30 12:06:00) [16]2 s77 (30.11.05 12:03)
И как бы ты их сравнивал интересно?