Page 1 of 1

How to pass parameter values to TIBCSQL

Posted: Tue 02 Oct 2012 11:52
by gaborboros
Hi!

I want to insert records to a table with TIBCSQL.
But got error message "validation error for column FIELD4 value null" on Execute.
Use FB 2.5.2 and IBDAC 4.5.9.

My table:

Code: Select all

CREATE TABLE TABLE1 (
    FIELD1  BIGINT NOT NULL,
    FIELD2  SMALLINT,
    FIELD3  BIGINT,
    FIELD4  SMALLINT NOT NULL,
    FIELD5  NUMERIC(14,2),
    FIELD6  NUMERIC(14,2)
);
Delphi example:

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
var
  FB_DB:TIBCConnection;
  FB_TR:TIBCTransaction;
  qSC:TIBCSQL;

begin
  FB_DB:=TIBCConnection.Create(Self);
  FB_DB.Options.Charset:='UTF8';
  FB_DB.Database:='C:\tmp\IBDAC_TEST.FDB';
  FB_DB.ClientLibrary:='fbclient.dll';
  FB_DB.UserName:='SYSDBA';
  FB_DB.PassWord:='masterkey';

  FB_TR:=TIBCTransaction.Create(Self);
  FB_TR.IsolationLevel:=iblcustom;
  FB_TR.DefaultConnection:=FB_DB;
  FB_TR.Params.Add('wait');
  FB_TR.Params.Add('write');
  FB_TR.Params.Add('read_committed');
  FB_TR.Params.Add('no_rec_version');
  FB_TR.DefaultCloseAction:=taRollback;


  FB_DB.Open;

  qSC:=TIBCSQL.Create(Self);
  qSC.Connection:=FB_DB;
  qSC.Transaction:=FB_TR;

  with qSC do
   begin
     SQL.Add('INSERT INTO TABLE1 (');
     SQL.Add('FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, FIELD6');
     SQL.Add(') VALUES (');
     SQL.Add('NEXT VALUE FOR SEQ_1, :IN_FIELD2, :IN_FIELD3, :IN_FIELD4, :IN_FIELD5, :IN_FIELD6');
     SQL.Add(') RETURNING FIELD1;');

     ParamByName('IN_FIELD2').Value:=2;
     ParamByName('IN_FIELD3').Value:=3;
     ParamByName('IN_FIELD4').Value:=4;
     ParamByName('IN_FIELD5').Value:=5;
     ParamByName('IN_FIELD6').Value:=6;

     FB_TR.StartTransaction;

     Execute;

     FB_TR.Commit;
   end;
end;
Gabor

Re: How to pass parameter values to TIBCSQL

Posted: Tue 02 Oct 2012 12:40
by ZEuS
To avoid such error, you can try one of the following approaches:
- set the parameter values using the AsInteger property instead of Value;
- in your example, set the qSC.DescribeParams property to True and explicitly call the qSC.Prepare method before setting the parameter values.

Re: How to pass parameter values to TIBCSQL

Posted: Tue 02 Oct 2012 13:51
by gaborboros
AsInteger and DescribeParams+Prepare works too.

Thank You!

Gabor