Текущий архив: 2005.03.06;
Скачать: CL | DM;
Вниз
возврат пустых записей Найти похожие ветки
← →
denis24 (2005-02-03 11:01) [0]Есть запрос
SELECT
ID_DOCTOR,
FAM_DOCTOR
FROM
TBLDOCTOR
where fam_doctor like :fam_doctor
Присваиваю параметру значение
ParamByName("fam_doctor").AsString:="%";
Все отлично выбирает ,но если заполнено только поле ID_DOCTOR
а FAM_DOCTOR=null то ничего не возвращает.Хотя по идее должно.
Открываю таблицу с помощью fibplus,датасетом.
Как это побороть?
← →
Reindeer Moss Eater © (2005-02-03 11:05) [1]Хотя по идее должно.
Как раз по идее и не должно.
← →
Reindeer Moss Eater © (2005-02-03 11:06) [2]http://delphimaster.net/view/3-1107417037/
← →
ЮЮ © (2005-02-03 11:07) [3]любое сравнение с NULL даст False. Даже NULL <> NULL.
и что это за безымянные доктора? :)
запрети вводить NULL и вводи пустую строку
или
where
(:fam_doctor = "%") AND (fam_doctor IS NULL) OR
(fam_doctor like :fam_doctor)
← →
denis24 (2005-02-03 12:16) [4]Это например-доктора
Реально имя ,фамилия ,отчество.Если что-то из них пусто то сабж.Спасибо,разобрался
← →
Anatoly Podgoretsky © (2005-02-03 22:16) [5]denis24 (03.02.05 11:01)
С какой встати?
← →
denis24 (2005-02-04 13:23) [6]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"
почему так?
← →
Соловьев © (2005-02-04 13:28) [7]
> (: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
← →
msguns © (2005-02-04 13:30) [8]>ЮЮ © (03.02.05 11:07) [3]
>(:fam_doctor = "%")
Але що це ?
← →
denis24 (2005-02-04 13:35) [9]Хочу возврат фио докторов через параметр
Если путой то все если нет то по значению параметра
Тоесть раз написал с запросе
(: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)+"%";
← →
Соловьев © (2005-02-04 13:42) [10]
> Если путой то все если нет то по значению параметра
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;
← →
Соловьев © (2005-02-04 13:52) [11]
> select *
> from Doctors
> where fio like :p1
select *
from Doctors
where coalesce(fio,"") like :p1
← →
denis24 (2005-02-04 14:14) [12]с этим понятно.спасибо.
А как быть в след ситуации
select .... from .... where date >=:P1 and date<=:P2
Параметры берутся из dateedit1 и dateedit2
Запрос пройдет если он что то выберет в них.
А если нет?
То нужно выбрать все записи со всеми датами.
Динамически составлять запрос при проверке dateedit не катит.
Нужно именно с параметрами...
← →
Johnmen © (2005-02-04 14:15) [13]>denis24 (04.02.05 13:23) [6]
>where
>(:fam_doctor = "%") and (fam_doctor IS NULL) or
>(fam_doctor like :fam_doctor)
Здесь :fam_doctor два разных параметра, несмотря на одинаковость имени. И оба нуждаются в определении...:)
← →
Соловьев © (2005-02-04 14:19) [14]
> if Trim(AFio)<>"" then p:= "%"+AFio+"%";
if AFio<>"" then p:= "%"+AFio+"%";
← →
Соловьев © (2005-02-04 14:47) [15]
> Динамически составлять запрос при проверке dateedit не катит.
> Нужно именно с параметрами...
почему не катит? а что динамически параметры нельзя писать?
← →
denis24 (2005-02-04 14:51) [16]to Соловьев © (04.02.05 14:47) [15]
1.что такое coalesce?
2.В запросе есть жестко параметры.Что им присвоить когда dateedit1.date=0 and dateedit2.date=0 и нужно получить НД без условия даты в таком случае?
← →
Соловьев © (2005-02-04 14:58) [17]
> 1.что такое coalesce?
найди где установлен ФБ и там должно валятся чтиво - ReleaseNotes.pdf
читать и читать
> 2.В запросе есть жестко параметры.Что им присвоить когда
> dateedit1.date=0 and dateedit2.date=0 и нужно получить НД
> без условия даты в таком случае?
а почему нельзя формировать запрос динамически? и параметры при это никто не запрещает.
← →
Соловьев © (2005-02-04 15:01) [18]
> 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) [19]
> 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;
...
← →
Sergey13 © (2005-02-04 15:09) [20]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:10) [21]В ФИБах есть такое понятие как макрос... т.е. само условие where date >=:P1 and date<=:P2 можно записать(на пример )как %where_cond.. потом смотреть выбрали даты или нет... и менять соответсвенно where_cond.
← →
denis24 (2005-02-04 18:02) [22]Sergey13 © (04.02.05 15:09) [20]
Спасибо.То что надо.
Страницы: 1 вся ветка
Текущий архив: 2005.03.06;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.042 c