Форум: "Базы";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизSQL запрос к Access через ADO дату в строку Найти похожие ветки
← →
s77 (2005-11-30 12:03) [0]Как поле даты в запросе преобразовать в строку
хотелось бы даты сравнивать в строковом формате, а то c Null"ами проблемы
← →
Sergey13 © (2005-11-30 12:06) [1]2 s77 (30.11.05 12:03)
И как бы ты их сравнивал интересно?
← →
Desdechado © (2005-11-30 12:07) [2]а с NULL сравнивать только IS NULL или IS NOT NULL
← →
Anatoly Podgoretsky © (2005-11-30 12:11) [3]А как ты NULL то преобразуешь в строку?
← →
s77 (2005-11-30 12:13) [4]ну как бы сравнивал - формат то одинаковый
есть же функция на стороне delphi datetostr
в оракле например есть функция to_char(дата, формат вывода даты)
что же касается сравнения с null ом мне тут уже подсказали
например сравнение по полю name кот. может быть null ом
((name like :name) or (name is null and :name is null))
с датой работает не правильно - кода передаю в параметр дату (не нулл) - цепляет из таблицы и нужную дату (если она есть) и пустые строки
← →
Sergey13 © (2005-11-30 12:16) [5]А ты дату с Like тоже ищешь?
← →
s77 (2005-11-30 12:17) [6]тогда помогите написать чтобы когда я ищу дату - выводилось только точное совпадение с ней, а когда передаю в параметр нулл (поиск без учета даты) чтоб выводились все
(с текстовыми полями работает а с датами нет см. мой пример выше, только передаю не нулл а %)
← →
s77 (2005-11-30 12:18) [7]
> А ты дату с Like тоже ищешь?
по всякому пробовал :)
← →
Sergey13 © (2005-11-30 12:22) [8]((data=:data and :data is not null) or (:data is null))
← →
s77 (2005-11-30 12:26) [9]неа, не работает в любом случае выдает все записи и когда передаю дату и когда передаю нулл
← →
Sergey13 © (2005-11-30 12:28) [10]Может таки свой запрос опубликуешь?
← →
s77 (2005-11-30 12:32) [11]Запрос
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 дата
← →
s77 (2005-11-30 12:38) [12]выход - в базе сделать поля дат текстовыми - но волнует меня как будет работать поис по диапазону например показать тех у кого дата с 11.02.2004 до 02.10.2005
← →
Sergey13 © (2005-11-30 12:42) [13]А зачем datetostr(DateTimePicker5.Date)? У тебя поле какого типа?
>trim(Edit19.Text);
Если в Edit19.Text нет % то смысл Like теряется. Может тут причина.
← →
Sergey13 © (2005-11-30 13:08) [14]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-)
← →
s77 (2005-11-30 14:40) [15]
> А зачем 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) [16]- cnfdk. = ставлю
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c