Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-1108749752
Техник Харлан
2005-02-18 21:02
2005.03.06
Вставка Flash-карты


14-1108477273
Prohodil Mimo
2005-02-15 17:21
2005.03.06
чем округлить 690.005 что бы получилось 690.01, а не 690.00 ?


1-1108904106
ПроНыРа
2005-02-20 15:55
2005.03.06
Сервис


6-1104006670
Matrex
2004-12-25 23:31
2005.03.06
Как определить группу в которой находится юзер?


3-1107513054
Vantage-10
2005-02-04 13:30
2005.03.06
Обработка SQL запроса в Delphi