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

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

Передача параметра со значение NULL


alex810810 ©   (2012-03-23 15:06:00) 

Всем добрый день. Есть запрос.

       DataOtchet1.Выбор_объектов_факт.Params[0].Value:=шифр;
       DataOtchet1.Выбор_объектов_факт.Params[1].Value:=начальная_дата1;
       DataOtchet1.Выбор_объектов_факт.Params[2].Value:=конечная_дата1;
       if блок='' then
        begin
         DataOtchet1.Выбор_объектов_факт.Params[3].Value:=Null ;
        end;
       if блок<>'' then
        begin
         DataOtchet1.Выбор_объектов_факт.Params[3].Value:=блок;
        end;
       DataOtchet1.Выбор_объектов_факт.Execute;
       DataOtchet1.Выбор_объектов_факт.First;


но в этой строке значение NULL не передается

пробывал и так

DataOtchet1.Выбор_объектов_факт.Params[3].AsString:=Null ;

Подскажите как передать параметром значение NULL


Ega23   (2012-03-23 16:54:00) [1]


> тут ошибка (ни или может быть ошибка), нужно так
> :param2 =zzz)';
>


Тогда уж zzz=:param2  :)


> Оказалось проше сделать так =)


Скажи, а чем тебя else не устраивает? Религия запрещает?
Не, оно конечно ненаказуемо. Но ввергает в содрогание.

function ConvertBooleanValue(Value: Boolean): Boolean;
begin
 if Value = True then
 begin
   Result := False;
 end
 else
 begin
   if Value = False then
   begin
     Result := True;
   end
   else
   begin
     raise Exception.Create('Unknown boolean value')
   end;
 end;
end;


:)


sniknik   (2012-03-23 15:53:00) [2]

> :param2=zzz)';
тут ошибка (ни или может быть ошибка), нужно так
:param2 =zzz)';


alex810810   (2012-03-23 15:53:00) [3]

Оказалось проше сделать так =)

if блок='' then
        begin
         DataOtchet1.Выбор_объектов_факт.SQL.Text:='SELECT  distinct a.kod_obekta '+
         'FROM '+ 'jurnal'+UPromejutochnay.код_цеха+'br'+код_бригады_табель+UPromejutochnay.год_открытия+
         ' a where a.shifr_obekta='''+шифр+''' and a.data_provedeniy_rabot between to_date('''+начальная_дата1+''''+
         ',''dd.mm.yyyy'') and to_date('''+конечная_дата1+''',''dd.mm.yyyy'')'+
         ' and (a.priznak_otgula=''Работа в выходной'' or a.priznak_otgula is null)  and nomer_bloka is null';
        end;
       if блок<>'' then
        begin
         DataOtchet1.Выбор_объектов_факт.MacroByName('jurnal026br12010').Value:=
         'jurnal'+UPromejutochnay.код_цеха+'br'+код_бригады_табель+UPromejutochnay.год_открытия;
         DataOtchet1.Выбор_объектов_факт.Params[0].Value:=шифр;
         DataOtchet1.Выбор_объектов_факт.Params[1].Value:=начальная_дата1;
         DataOtchet1.Выбор_объектов_факт.Params[2].Value:=конечная_дата1;
         DataOtchet1.Выбор_объектов_факт.Params[3].Value:=блок;
        end;

хотя хотелось бы этого избежать =)


alex810810   (2012-03-23 15:50:00) [4]

Нет. Пишет [1]: ORA-00920: invalid relational operator


Ega23   (2012-03-23 15:38:00) [5]

попробуй так:


var
 v: variant;
begin
DataSet.CommandText := 'select xxx from yyy where (:param1 is null or :param2=zzz)';
if блок = '' then
 v := null
else
 v := блок;
 
DataSet.ParamByName('param1').Value = v;
DataSet.ParamByName('param2').Value = v;


alex810810   (2012-03-23 15:27:00) [6]

А вот параметром не получается.


alex810810   (2012-03-23 15:26:00) [7]


SELECT  distinct a.kod_obekta
 FROM jurnal026br12010 a
 where a.shifr_obekta=058-2362-10-00517-00000'  and a.data_provedeniy_rabot between to_date('01.02.2012','dd.mm.yyyy') and to_date('29.02.2012','dd.mm.yyyy')
       and (a.priznak_otgula='Работа в выходной' or a.priznak_otgula is null)  and
nomer_bloka=is null


если параметры вручную прописать то все срабатывает


Anatoly Podgoretsky   (2012-03-23 15:23:00) [8]

Вроде как Оракл не поддерживает, у них нет NULL для строк.


alex810810   (2012-03-23 15:18:00) [9]

CУБД Oracle тоже пробывал не помогает. Когда передавать параметр на сохранение срабатывает, а на выборку нет.


Anatoly Podgoretsky   (2012-03-23 15:17:00) [10]

> alex810810  (23.03.2012 15:06:00)  [0]

DataOtchet1.Выбор_объектов_факт.Params[3].Clear конечно если твоя СУБД
поддерживает


Наверх

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