Subject Re: [ib-support] Problems with Firebird 1.0 and Dialect 3
Author Helen Borrie
At 05:02 PM 10-09-02 +0000, you wrote:
>I previously posted this message in the IBObjects group and received a
>couple suggestions but they appeared to have no effect on solving the
>problem. Below is one example of the type of error I am getting, and
>the Delphi and stored procedure code.
>
>I am using IOBjects 3.6 and Delphi 5 Enterprise.
>
>The database server is Firebird 1.0.
>
>In delphi code and stored procedures code that has been stable for
>several months I am getting an errors in stored procedures. It
>happened when I changed the Dialect from 1 to 3. If I change it back
>to Dialect 1, the problems go away.
>
>I want to move the database to Dialect 3 but I can't figure out the
>source of this error. I have tried rebuilding the database form
>scratch but the results were the same.
>
>Has anyone else found that stored procedures work in Dialect 1 and
>failed in Dialect 3. If not, then it must be something in my code.
>
>Can anyone suggest where to look or a solution?
>
>
>*******The stored procedure code*************
>
>CREATE PROCEDURE DELETECONTACTTEMP (
> EMPLOYEE CHAR (6))
>AS
>BEGIN
> DELETE FROM CONTACTTEMP WHERE EmpID = :EMPLOYEE;
> SUSPEND;
>END
>
>*******The delphi code*************
>
>with DM_StoredProc.spDelContactTmp do
> begin
> // insertcontactlabeldata
> DatabaseName := gsDataBaseName;
> StoredProcName := 'deletecontacttemp';
> Prepare;
> ParamByName('EMPLOYEE').Value := gsEmpID;
> try
> ExecProc;
> except
> on E: Exception do
> MessageDlg(rsErrMsg2, mtWarning, [mbOK], 0);
> end;
> UnPrepare;
> end;
>
>*******The error message*************
>
>ISC ERROR CODE:33544569
>
>ISC ERROR MESSAGE:
>Dynamic SQL Error
>parameter mismatch for procedure DELETECONTACTTEMP

The difference will have to do with the fact that Dialect 3 doesn't do
implicit casting of integer to string and vice versa. Is your gsEmpID
variable an integer? If so, cast it as string before you use it as an
input to your proc,

viz.

ParamByName('EMPLOYEE').AsString := IntToString(gsEmpID);

Also, take out the SUSPEND statement. It doesn't belong here.

heLen