Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: parameter definition changed
parameter definition changed
Posted: 2007/10/03 07:06
 
We would like to use a stored procedure with 1 parameter, and a result.

(* oracle func header is:
CREATE OR REPLACE FUNCTION SF_Proc1 (puserid integer) RETURN integer is
*)

the following code throws an exception:
ADStoredProc1.Prepare;
ADStoredProc1.Params[0].AsInteger := 1;
ADStoredProc1.ExecProc; <- exception
Result := ADStoredProc1.ParamByName('RESULT').AsInteger;

exception message: ->[AnyDac][Phys]-338.Parameter [RESULT] definition changed. Query must be reprepared

Anydac ver. 1.1.22 / oracle 10g / Delphi 7 enterprise

Please help if you can,
Andras

Post edited by: Szikra, at: 2007/10/03 07:09
Re:parameter definition changed
Posted: 2007/10/03 07:18
 
Hello

1) After ADStoredProc1.Prepare call, Params[0] has data type, as this parameter is recognized by AnyDAC. For example ftFmtBCD. When you assign a value to the parameter using one of AsXXXX methods, they are implicitly changing parameter data type. For example AsInteger changes to ftInteger. And if parameter data type is changed, then dataset must be reprepared.

2) To avoid this, use Params[0].Value := 1 instead of Params[0].AsInteger := 1. Assigning to the Value property preserves original parameter data type.

Regards,
Dmitry
Re:parameter definition changed
Posted: 2007/10/03 07:34
 
Thanks, it works!
Andras