![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметра со значение 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 конечно если твоя СУБД
поддерживает