Subject Re: [IBO] Tricky insert statement won't work(LONG)
Author Pirtea Calin
I have managed to find the fix for my problem!

Unit IBA_UpdateSQL.IMP:
procedure TIB_UpdateSQL.PrepareCustomDML(
ADSQL: TIB_Statement;const ASQL: string );
var
ii: smallint;
tmpParam: TIB_Column;
tmpCol: TIB_Column;
tmpName: string;
ucName: string;
begin
with ADSQL do
begin
FCombineDuplicateParams := true; //I changed this to false and all works
OK

When i have more time i'll try and figure out why doesn't it work with
"true"


--
Best regards,
Application Developer
Pirtea Calin Iancu
S.C. SoftScape S.R.L.
pcalin@...
""Pirtea Calin"" <pcalin@...> wrote in message
news:a8r5le$4l7$1@......
> I use an IB_Query to insert and update some fields
> from a table and i customized the insertsql(and editsql) in order
> to set some fields "noneditable/noninsertable".
>
> I use Firebird WI-V6.2.794 Firebird 1.0 and IBO4 4.2.Gc
>
> I'll present the facts first.
> Table FACT_IMP is created with this script.
> /* Begin script*/
> create domain D_ID numeric(18) default 0 check(Value > 0) not null;
> create domain D_ORD_NR integer default 0 check(Value>=0) not null;
> create domain D_Intreg integer default 0 not null;
> create domain D_Data_F date not null;
> create domain D_String60 VarChar(60);
> create domain D_Pret Numeric(18,2) default 0 not null;
> create domain D_Boolean Char(1) default '0'// 1 = True; 0 = False
> Check ((Value='1') or (Value='0')) not null;
>
>
> /* Facturi de import */
> create table Fact_imp (Id D_ID primary key,
> Nr_fact D_ORD_NR,
> Data_fact D_Data_F,
> Year_Fact D_Intreg, // Auto. Updated by Self
> Lista_Fact D_String60,
> Nr_DVOT D_ORD_NR,
> Data_DVOT D_Data_F,
> Year_DVOT D_Intreg, // Auto. Updated by Self
> Nr_TE D_ORD_NR, // Manual. DVE Italy
> Data_TE Date,
> Year_TE D_Intreg, // Auto. Updated by Self
> Termen D_Intreg,
> Curs D_Pret,
> Nr_Contract D_ORD_NR,
> Orig_Rom D_Boolean, // Manual. Originara Romania
> Val_IN D_Pret, // Auto. Updated by elem_imp
> Val_OUT D_Pret); // Auto. Updated by elem_imp
> create generator gen_fact_imp_id;
>
> set term ``;
> create trigger tr_Fact_imp_bu for Fact_imp
> before update
> as
> begin
> new.Year_fact=Extract(Year from new.Data_fact);
> new.Year_DVOT=Extract(Year from new.Data_DVOT);
> new.Year_TE=Extract(Year from new.Data_TE);
> end``
> create trigger tr_Fact_imp_bi for Fact_imp
> before insert
> as
> begin
> new.val_in=0;
> new.val_out=0;
> new.Year_fact=Extract(Year from new.Data_fact);
> new.Year_DVOT=Extract(Year from new.Data_DVOT);
> new.Year_TE=Extract(Year from new.Data_TE);
> end``
> set term ;``
> /* End script*/
>
> IB_Query:
>
> The sql is like this:
>
> SELECT *
> FROM FACT_IMP
> where id=:myid
>
> I use the generatorlink with
> id=GEN_FACT_IMP_ID
> to get the next id
>
> InsertSQL:
>
> INSERT INTO FACT_IMP(
> ID, /*PK*/
> LISTA_FACT,
> NR_FACT,
> DATA_DVOT,
> DATA_FACT,
> DATA_TE,
> TERMEN,
> CURS,
> ORIG_ROM)
> VALUES (
> :ID,
> :LISTA_FACT,
> :NR_FACT,
> :DATA_FACT,
> :DATA_FACT,// Here appears to start the problem (it is set to 0)
> :DATA_FACT,// This time it is null and gives a problem for before
insert
> trigger
> :TERMEN,
> :CURS,
> :ORIG_ROM)
>
> The monitor shows on prepare
> /*---
> PREPARE STATEMENT
> TR_HANDLE = 98241200
> STMT_HANDLE = 98241272
> SELECT *
> FROM FACT_IMP
> where id=? /* myid */
> PLAN (FACT_IMP INDEX (RDB$PRIMARY13))
> FIELDS = [ Version 1 SQLd 18 SQLn 30
> FACT_IMP.ID = <NIL>
> FACT_IMP.NR_FACT[NR_FACT] = <NIL>
> FACT_IMP.DATA_FACT[DATA_FACT] = <NIL>
> FACT_IMP.YEAR_FACT[YEAR_FACT] = <NIL>
> FACT_IMP.LISTA_FACT[LISTA_FACT] = <NIL>
> FACT_IMP.NR_DVOT = <NIL>
> FACT_IMP.DATA_DVOT = <NIL>
> FACT_IMP.YEAR_DVOT = <NIL>
> FACT_IMP.NR_TE = <NIL>
> FACT_IMP.DATA_TE = <NIL>
> FACT_IMP.YEAR_TE = <NIL>
> FACT_IMP.ID_CLIENT = <NIL>
> FACT_IMP.TERMEN = <NIL>
> FACT_IMP.CURS = <NIL>
> FACT_IMP.NR_CONTRACT = <NIL>
> FACT_IMP.ORIG_ROM = <NIL>
> FACT_IMP.VAL_IN = <NIL>
> FACT_IMP.VAL_OUT = <NIL> ]
> ----*/
> /*---
> PREPARE STATEMENT
> TR_HANDLE = 98241200
> STMT_HANDLE = 98241404
> INSERT INTO FACT_IMP(
> ID, /*PK*/
> LISTA_FACT,
> NR_FACT,
> DATA_DVOT,
> DATA_FACT,
> DATA_TE,
> ID_CLIENT,
> TERMEN,
> CURS,
> ORIG_ROM)
> VALUES (
> ? /* ID */ ,
> ? /* LISTA_FACT */ ,
> ? /* NR_FACT */ ,
> ? /* DATA_FACT */ ,
> ? /* DATA_FACT */ ,
> ? /* DATA_FACT */ ,
> ? /* ID_CLIENT */ ,
> ? /* TERMEN */ ,
> ? /* CURS */ ,
> ? /* ORIG_ROM */ )
> FIELDS = [ Version 1 SQLd 0 SQLn 30 ]
> SECONDS = 0.010
> ----*/
>
> This far all looks ok to me, and i do insert:
>
> /*---
> PREPARE STATEMENT
> TR_HANDLE = 98241200
> STMT_HANDLE = 98241008
> SELECT GEN_ID ( GEN_FACT_IMP_ID, 1 )
> FROM RDB$DATABASE
> PLAN (RDB$DATABASE NATURAL)
> FIELDS = [ Version 1 SQLd 1 SQLn 1
> GEN_ID = 0 ]
> ----*/
> /*---
> EXECUTE2 DSQL
> TR_HANDLE = 98241200
> STMT_HANDLE = 98241008
> PARAMS = [ ]
> FIELDS = [ Version 1 SQLd 1 SQLn 1
> GEN_ID = 19 ]
> SELECT COUNT: 1
> ----*/
>
> Still working good. Now i post and the params become useless:
>
> /*---
> EXECUTE STATEMENT
> TR_HANDLE = 98241200
> STMT_HANDLE = 98241404
> PARAMS = [ Version 1 SQLd 10 SQLn 10
> FACT_IMP.ID = 19
> FACT_IMP.LISTA_FACT[LISTA_FACT] = '0'
> FACT_IMP.NR_FACT[NR_FACT] = 1
>
> _Here_is_shown_the_problem_
>
> FACT_IMP.DATA_FACT[DATA_FACT] = '08 Apr 2002'
> [DATA_FACT] = <n> '17 Nov 1858'
> // It posts 0 for the second data_fact
> [DATA_FACT] = <NULL>
> and null for the third !!! Why this behaviour?
>
>
>
> FACT_IMP.ID_CLIENT = 5
> FACT_IMP.TERMEN = 0
> FACT_IMP.CURS = 0
> FACT_IMP.ORIG_ROM = '1' ]
> ERRCODE = 335544347
> ----*/
> /*---
> INTERPRETE BUFFER =
> ERRCODE = 57
> ----*/
> /*---
> INTERPRETE BUFFER = validation error for column YEAR_TE, value "*** null
> ***"
> ERRCODE = -1
> ----*/
>
> I tried the same insert with DSQL and it works perfectly
> but the monitor output is very diferent:
>
> /*---
> EXECUTE STATEMENT
> TR_HANDLE = 10655456
> STMT_HANDLE = 10655528
> PARAMS = [ Version 1 SQLd 10 SQLn 10
> [ID] = 10001
> [LISTA_FACT] = '0'
> [NR_FACT] = 1
> [DATA_FACT] = '08 Apr 2002'
> [DATA_FACT] = '08 Apr 2002'
> [DATA_FACT] = '08 Apr 2002'
> [ID_CLIENT] = 6
> [TERMEN] = 0
> [CURS] = 0
> [ORIG_ROM] = '1' ]
> INSERT COUNT: 1
> ----*/
>
> All data_fact have the same value as expected!
>
> Can you help me trace this in IBO or i should not do such
> insertsqls(because they're wrong)?
>
> --
> Best regards,
> Application Developer
> Pirtea Calin Iancu
> S.C. SoftScape S.R.L.
> pcalin@...
>
>
>
>
___________________________________________________________________________
> IB Objects - direct, complete, custom connectivity to Firebird or
InterBase
> without the need for BDE, ODBC or any other layer.
>
___________________________________________________________________________
> http://www.ibobjects.com - your IBO community resource for Tech Info
papers,
> keyword-searchable FAQ, community code contributions and more !
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>
>