![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
возврат пустых записей [D6, FIB 1.5]
denis24 © (2005-02-03 11:01:00)Есть запрос
SELECT
ID_DOCTOR,
FAM_DOCTOR
FROM
TBLDOCTOR
where fam_doctor like :fam_doctor
Присваиваю параметру значение
ParamByName('fam_doctor').AsString:='%';
Все отлично выбирает ,но если заполнено только поле ID_DOCTOR
а FAM_DOCTOR=null то ничего не возвращает.Хотя по идее должно.
Открываю таблицу с помощью fibplus,датасетом.
Как это побороть?
denis24 (2005-02-04 18:02:00) [1]Sergey13 © (04.02.05 15:09) [20]
Спасибо.То что надо.
Виталий Панасенко (2005-02-04 15:10:00) [2]В ФИБах есть такое понятие как макрос... т.е. само условие where date >=:P1 and date<=:P2можно записать(на пример )как %where_cond.. потом смотреть выбрали даты или нет... и менять соответсвенно where_cond.
Sergey13 (2005-02-04 15:09:00) [3]2[16] denis24 (04.02.05 14:51)
>2.
В таких случаях иногда удобно ввести дополнительный параметр-флажок типа
where (:par_flag=1 and твое условие отбора) or :par_flag<>1
Этот способ подойдет и для "выбора доктора".
Еще можно задать параметрам и заведомо большие/маленькие даты например типа 01.01.1000 и 01.01.3000
Соловьев (2005-02-04 15:01:00) [4]
> if Search.Active then Search.Close;
> Search.Params[0].AsString := p;
> Search.Open;
небольшой рефакторинг :)
...
if Search.Active then Search.Close;
Search.SQL.Text := 'select * from Doctors where coalesce(fio,'''') like :p1';
Search.Params[0].AsString := p;
...
Соловьев (2005-02-04 15:01:00) [5]
> if Search.Active then Search.Close;
> Search.Params[0].AsString := p;
> Search.Open;
небольшой рефакторинг :)
...
if Search.Active then Search.Close;
Search.SQL.Text := 'select * from Doctors where coalesce(fio,'') like :p1';
Search.Params[0].AsString := p;
...
Соловьев (2005-02-04 14:58:00) [6]
> 1.что такое coalesce?
найди где установлен ФБ и там должно валятся чтиво - ReleaseNotes.pdf
читать и читать
> 2.В запросе есть жестко параметры.Что им присвоить когда
> dateedit1.date=0 and dateedit2.date=0 и нужно получить НД
> без условия даты в таком случае?
а почему нельзя формировать запрос динамически? и параметры при это никто не запрещает.
denis24 (2005-02-04 14:51:00) [7]to Соловьев © (04.02.05 14:47) [15]
1.что такое coalesce?
2.В запросе есть жестко параметры.Что им присвоить когда dateedit1.date=0 and dateedit2.date=0 и нужно получить НД без условия даты в таком случае?
Соловьев (2005-02-04 14:47:00) [8]
> Динамически составлять запрос при проверке dateedit не катит.
> Нужно именно с параметрами...
почему не катит? а что динамически параметры нельзя писать?
Соловьев (2005-02-04 14:19:00) [9]
> if Trim(AFio)<>'' then p:= '%'+AFio+'%';
if AFio<>'' then p:= '%'+AFio+'%';
Johnmen (2005-02-04 14:15:00) [10]>denis24 (04.02.05 13:23) [6]
>where
>(:fam_doctor = '%') and (fam_doctor IS NULL) or
>(fam_doctor like :fam_doctor)
Здесь :fam_doctor два разных параметра, несмотря на одинаковость имени. И оба нуждаются в определении...:)
denis24 (2005-02-04 14:14:00) [11]с этим понятно.спасибо.
А как быть в след ситуации
select .... from .... where date >=:P1 and date<=:P2
Параметры берутся из dateedit1 и dateedit2
Запрос пройдет если он что то выберет в них.
А если нет?
То нужно выбрать все записи со всеми датами.
Динамически составлять запрос при проверке dateedit не катит.
Нужно именно с параметрами...
Соловьев (2005-02-04 13:52:00) [12]
> select *
> from Doctors
> where fio like :p1
select *
from Doctors
where coalesce(fio,'') like :p1
Соловьев (2005-02-04 13:42:00) [13]
> Если путой то все если нет то по значению параметра
select *
from Doctors
where fio like :p1
procedure TDM.SearchDoctors(AFio: string);
var p: string;
begin
p := '%';
if Trim(AFio)<>'' then p:= '%'+AFio+'%';
if Search.Active then Search.Close;
Search.Params[0].AsString := p;
Search.Open;
end;
denis24 (2005-02-04 13:35:00) [14]Хочу возврат фио докторов через параметр
Если путой то все если нет то по значению параметра
Тоесть раз написал с запросе
(:fam_doctor = '%') and (fam_doctor IS NULL) or
(fam_doctor like :fam_doctor)
А дальше только присваивай значение :P1
if Trim(Edit1.Text)<>'' then
ParamByName('fam_doctor').AsString:='%'+Trim(Edit1.Text)+'%';
msguns (2005-02-04 13:30:00) [15]>ЮЮ © (03.02.05 11:07) [3]
>(:fam_doctor = '%')
Але що це ?
Соловьев (2005-02-04 13:28:00) [16]
> (:fam_doctor = '%')
(fam_doctor = '%')
> (:fam_doctor = '%') and (fam_doctor IS NULL) or
> (fam_doctor like :fam_doctor)
какой вообще смысл? что хотим?
> 'aritmetic exception,numeric overflow or string truncation'
http://www.ibase.ru/devinfo/ibrusfaq.htm
denis24 (2005-02-04 13:23:00) [17]To ЮЮ © (03.02.05 11:07) [3]
Написал в запросе
SELECT
ID_DOCTOR,
FAM_DOCTOR
FROM
TBLDOCTOR
where
(:fam_doctor = '%') and (fam_doctor IS NULL) or
(fam_doctor like :fam_doctor)
Потом в обработке зобытия Onchange edita присваиваю значение параметру :fam_doctor
ParamByName('fam_doctor').AsString:='%'+Trim(Edit1.Text)+'%';
И у меня выскакивает ошибка
'aritmetic exception,numeric overflow or string truncation'
почему так?
Anatoly Podgoretsky (2005-02-03 22:16:00) [18]denis24 (03.02.05 11:01)
С какой встати?
denis24 (2005-02-03 12:16:00) [19]Это например-доктора
Реально имя ,фамилия ,отчество.Если что-то из них пусто то сабж.Спасибо,разобрался
ЮЮ (2005-02-03 11:07:00) [20]любое сравнение с NULL даст False. Даже NULL <> NULL.
и что это за безымянные доктора? :)
запрети вводить NULL и вводи пустую строку
или
where
(:fam_doctor = '%') AND (fam_doctor IS NULL) OR
(fam_doctor like :fam_doctor)