В UniQuery добавлено 2 условия и 2 параметра. Потом нужно закрыть датасет, добавить ещё одно условие (без параметров) и снова открыть. Проблема в том, что сразу после добавления нового условия, т.е. после "UniQuery1.Conditions.Add" пропадает значение одного параметров, при этом имена параметров/условий не пересекаются (т.е. разные).
сделал такой пример.
Код: Выделить всё
procedure SetCondVal(uniQuery: TuniQuery; const Name, Val: string);
Var
Cond: TDACondition;
q: integer;
n, v: string;
begin
Cond := uniQuery.Conditions.Find(Name);
// здесь значение параметра (LCDMIN) ещё на месте
for q := 0 to pred(uniQuery.ParamCount) do
begin
n := uniQuery.Params[q].Name;
v := uniQuery.Params[q].AsString;
v := v;// для бряки
end;
if Assigned(Cond) then
begin
Cond.Value := Val;
Cond.Enable;
end
else
uniQuery.Conditions.Add(Name, Val, True);// это условие выполняется
// здесь значение параметра (LCDMIN) уже потерялось
for q := 0 to pred(uniQuery.ParamCount) do
begin
n := uniQuery.Params[q].Name;
v := uniQuery.Params[q].AsString;
v := v;// для бряки
end;
end;
http://prntscr.com/r8hrbx
http://prntscr.com/r8hs9s
http://prntscr.com/r8hskj
http://prntscr.com/r8hstg
Может это поможет решить проблему.
Параметр "TYPESIDS" добавлен с помощью макроса, а проблемный параметр "LCDMIN" добавлен с помощью Conditions.Add().
Я не выполняю ни Conditions.Disable, ни Conditions.Clear, просто сразу добавляю новое условие.
По идее, параметр не должен терять свое значение. Сам параметр же не теряется.