SetQueryVariables problem

Devil

Member²
TOracleDataSet.SetQueryVariables problem

Hi Marco!
DOA 4.0.6.1
In procedure TOracleDataSet.SetQueryVariables
in line:
if not NullField(F) then AQuery.SetVariable(VarName, F.Value);

when F.IsNull then do not set variable for AQuery.
Why?

In my program it's potentially bug because if I use follow code for loop operation with dataset record then for next record where Field.IsNull Query variables have old values from previous record:

with FSourceDataSet do
try
Open;
while not Eof do
begin
with FReceiverOracleQuery do
begin
if FSourceDataSet.RecNo = 1
then begin
SQL.Text:= 'begin someprocedure(p1 => :p1 ... pn => :pn); end;';
FSourceDataSet.DeclareQueryVariables(FReceiverOracleQuery);
end;
FReceiverOracleQuery.ClearVariables;
FSourceDataSet.SetQueryVariables(FReceiverOracleQuery);
Execute;
end;
Next;
end;
finally
Close;
end;

I Fix this: add line FReceiverOracleQuery.ClearVariables;
bofore each FSourceDataSet.SetQueryVariables.

But i think you add information in doa manual, about: when used loops, user must implementation ClearVariables before use the SetQueryVariables
procedure.
In doa manual.pdf as Example at page 110: " TOracleDataSet.OnApplyRecord, Setting variable values"
you use this code:
DeptDataSet.DeclareQueryVariables(UpdateQuery);
DeptDataSet.SetQueryVariables(UpdateQuery);
UpdateQuery.Execute;

but for loops must be next code:
DeptDataSet.DeclareQueryVariables(UpdateQuery);
...
while not DeptDataSet.eof do
begin
UpdateQuery.ClearVariables;
DeptDataSet.SetQueryVariables(UpdateQuery);
UpdateQuery.Execute;
DeptDataSet.Next;
end;

Please fix it's in doa manual.
 
Back
Top