Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

возврат пустых записей [D6, FIB 1.5]


Страницы:   1 2

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)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо