Subject Re: Posting a second record to a Dataset linked to a TIB_Grid
Author Roberto Freitas
> in the query component, is there any SQL in the SQL update or
insert edit box?
Alan, I am not sure what is SQL update or insert edit box, if you
mean EditSQL and InsertSQL IB_Query's properties, they are ''

--- In IBObjects@yahoogroups.com, "Alan McDonald" <alan@m...> wrote:
> >
> > Hi Helen, as you asked:
> >
> > IB_QueryConta
> > KeyLinks
> > Conta.cct_ciireg
> > Conta.cct_ident
> > (these 2 fields are table primary key)
> > RequestLive property is TRUE
> >
> > This is from TIB_Monitor:
> >
> > SELECT * FROM Conta WHERE
> > cct_ciireg = '10010001'
> > AND cct_mae = 1004
> > ORDER BY cct_conta ASC
> >
> > PLAN SORT ((CONTA INDEX (IX_CONTA2)))
> >
> > FIELDS = [ Version 1 SQLd 13 SQLn 30
> > CONTA.CCT_CIIREG[CCT_CIIREG] = <NIL>
> > CONTA.CCT_IDENT = <NIL>
> > CONTA.CCT_MAE = <NIL>
> > CONTA.CCT_TIPO = <NIL>
> > CONTA.CCT_CONTA = <NIL>
> > CONTA.CCT_CUSCOD = <NIL>
> > CONTA.CCT_TITULO = <NIL>
> > CONTA.CCT_CRIACAO = <NIL>
> > CONTA.CCT_GRAU = <NIL>
> > CONTA.CCT_ORDEM = <NIL>
> > CONTA.CCT_RATEIO = <NIL>
> > CONTA.CCT_CHAT = <NIL>
> > CONTA.CCT_CHAP = <NIL> ]
> >
> >
> > INSERT INTO CONTA
> > ( CCT_CIIREG
> > , CCT_IDENT
> > , CCT_MAE
> > , CCT_CONTA
> > , CCT_TITULO
> > , CCT_TIPO
> > , CCT_CUSCOD
> > , CCT_ORDEM
> > , CCT_RATEIO
> > , CCT_CHAT
> > , CCT_CHAP)
> > VALUES
> > ( ? /* CONTA.CCT_CIIREG */
> > , ? /* CONTA.CCT_IDENT */
> > , ? /* CONTA.CCT_MAE */
> > , ? /* CONTA.CCT_CONTA */
> > , ? /* CONTA.CCT_TITULO */
> > , ? /* CONTA.CCT_TIPO */
> > , ? /* CONTA.CCT_CUSCOD */
> > , ? /* CONTA.CCT_ORDEM */
> > , ? /* CONTA.CCT_RATEIO */
> > , ? /* CONTA.CCT_CHAT */
> > , ? /* CONTA.CCT_CHAP */ )
> >
> > FIELDS = [ Version 1 SQLd 0 SQLn 30 ]
> > ----*/
> > /*---
> > [ 05/10/2005 17:23:59 ]
> > EXECUTE STATEMENT
> > TR_HANDLE = 14228092
> > STMT_HANDLE = 14226772
> > PARAMS = [ Version 1 SQLd 11 SQLn 11
> > CONTA.CCT_CIIREG[CCT_CIIREG] = '10010001'
> > CONTA.CCT_IDENT = 0
> > CONTA.CCT_MAE = 1004
> > CONTA.CCT_CONTA = '110101003'
> > CONTA.CCT_TITULO = 'teste1'
> > CONTA.CCT_TIPO = 'A'
> > CONTA.CCT_CUSCOD = <NULL>
> > CONTA.CCT_ORDEM = 0
> > CONTA.CCT_RATEIO = 0
> > CONTA.CCT_CHAT = 0
> > CONTA.CCT_CHAP = 0 ]
> >
> > ERRCODE = 335544347
> > ----*/
> > /*---
> > [ 05/10/2005 17:23:59 ]
> > INTERPRET BUFFER =
> >
> > ERRCODE = 61
> > ----*/
> > /*---
> > [ 05/10/2005 17:23:59 ]
> > INTERPRET BUFFER = validation error for column CCT_CRIACAO,
> > value "*** null ***"
> >
> > ERRCODE = -1
> > ----*/
> >
> > I did not construct the InsertSQL, so I suppose IBO did it.
> > As you can note, fields CCT_CRIACAO and CCT_GRAU are present in
> > SELECT clause, but are NOT present in INSERT clause, (CCT_GRAU is
> > allowed Null in DataBase) but if I watch at BeforePost event their
> > values are:
> >
> > FormatDateTime('yyyy-mm-dd hh:nn:ss', FieldByName
> > ('cct_criacao').AsDateTime) = '2005-10-05 18:04:34'
> > FieldByName('cct_grau').AsInteger = 5
> >
> > I did no changes on code, so I dont't know why the original
problem
> > was transfered from CCT_CIIREG to CCT_CRIACAO, but it's still the
> > same problem.
> >
> > I hope there's enough information for your analisys. Great thanks,
> >
> > Roberto
> >
> >
> > --- In IBObjects@yahoogroups.com, Helen Borrie <helebor@t...>
wrote:
> > > At 06:26 PM 4/10/2005 +0000, you wrote:
> > > >Hi Helen,
> > > >Now I remember my original problem that persists for weeks and
was
> > > >posted before.
> > > >Take a look on my original question:
> > > >
> > > >I am using a TIB_Grid linked to a TIB_DataSource and a
TIB_Query.
> > > >I have this code at IB_QueryContaAfterInsert event:
> > > >with IB_QueryConta do
> > > >begin
> > > >...
> > > >FieldByName('cct_ciireg').AsString := Gl_ciireg_f;
> > > >...
> > > >end;
> > > >Im this case, Gl_ciireg_f = '10010001'
> > >
> > > If 1) the field 'cct_ciireg' is present in the SELECT statement
> > >
> > > and
> > >
> > > 2) you have correct keylinks
> > >
> > > an
> > >
> > > 3) the dataset's RequestLive property is set to True
> > >
> > > then this assignment will work.
> > >
> > > >For a new record, the user types values for other fields on the
> > > >TIB_Grid. Field cct_ciireg is not visible on the grid, so user
> > cannot
> > > >change it.
> > > >I checked that the code above actually executes.
> > > >I watched FieldByName('cct_ciireg').AsString in 2 different
places:
> > > >at end of IB_QueryContaAfterInsert event and
> > > >at end of IB_QueryContaBeforePost event
> > > >In both places, the value is correct = '10010001'
> > > >Although, when posting record, I got this ISC Error Message:
> > > >ISC ERROR CODE: 335544347
> > > >validation error for column CCT_CIIREG, value "***null***"
> > > >
> > > >Looking at TIB_Monitor, the real Insert statement doesn't have
> > field
> > > >cct_ciireg, but only fields that are on the TIB_Grid
(cct_ciireg is
> > > >one of the fields whose value is assigned on code, not on grid,
> > > >because it is in the Query but not in the grid):
> > >
> > >
> > > >These are the strings from TIB_Monitor:
> > > >
> > > >INSERT INTO CONTA
> > > >( CCT_CONTA
> > > >, CCT_TITULO
> > > >, CCT_TIPO
> > > >, CCT_CUSCOD
> > > >, CCT_ORDEM
> > > >, CCT_RATEIO)
> > > >VALUES
> > > >( ? /* CONTA.CCT_CONTA */
> > > >, ? /* CONTA.CCT_TITULO */
> > > >, ? /* CONTA.CCT_TIPO */
> > > >, ? /* CONTA.CCT_CUSCOD */
> > > >, ? /* CONTA.CCT_ORDEM */
> > > >, ? /* CONTA.CCT_RATEIO */ )
> > >
> > > OK, if CCT_CIIREG really is present in the dataset, then this
> > InsertSQL was
> > > not constructed by IBO.
> > >
> > > >FIELDS = [ Version 1 SQLd 0 SQLn 30 ]
> > > >----*/
> > > >/*---
> > > >[ 16/09/2005 07:02:11 ]
> > > >EXECUTE STATEMENT
> > > >TR_HANDLE = 14164468
> > > >STMT_HANDLE = 14166400
> > > >PARAMS = [ Version 1 SQLd 6 SQLn 6
> > > >CONTA.CCT_CONTA = '110103018'
> > > >CONTA.CCT_TITULO = 'teste'
> > > >CONTA.CCT_TIPO = 'A'
> > > >CONTA.CCT_CUSCOD = 'teste'
> > > >CONTA.CCT_ORDEM = 0
> > > >CONTA.CCT_RATEIO = 0 ]
> > > >
> > > >ERRCODE = 335544347
> > > >----*/
> > > >/*---
> > > >[ 16/09/2005 07:02:11 ]
> > > >INTERPRET BUFFER =
> > > >
> > > >ERRCODE = 60
> > > >----*/
> > > >/*---
> > > >[ 16/09/2005 07:02:11 ]
> > > >INTERPRET BUFFER = validation error for column CCT_CIIREG,
> > value "***
> > > >null ***"
> > > >
> > > >Submiting these questions on Forum before, somebody suggests to
> > fill
> > > >in the IB_Query Insert property (at end of BeforePost event)
with
> > the
> > > >statement I want to submit to the server.
> > >
> > > That's not correct advice for the problem as you describe it
here.
> > >
> > > If you intend to use the Insert method of the dataset, you need
the
> > > InsertSQL to be present before the SELECT statement is prepared.
> > As I have
> > > explained before, for a simple SELECT statement, IBO does this
> > > automatically, as long as you have taken proper care with
> > KeyLinks. If you
> > > need to use custom SQL (which does not appear to be the case
here)
> > >
> > > Having a field's Visible property set to True does NOT prevent
it
> > being
> > > assigned to or, more broadly, you are mistaken if you think that
> > the
> > > InsertSQL is constructed from the fields that are visible in the
> > grid.
> > >
> > > I want to see the exact SELECT statement that is used to get the
> > > dataset. From there, I can show you what you need to do to make
> > this
> > > internal assignment. We are not talking about anything
> > complicated. The
> > > corrections I did to your online example are all you need to
assign
> > a value
> > > to a hidden field.
> > >
> > > Helen
>
> in the query component, is there any SQL in the SQL update or
insert edit box?
> If so - clear it out and let IBO dynamically generate it instead of
using an outdated version of it
> Alan