Subject Re: [firebird-support] JOIN clause
Author Svein Erling Tysvær
Roberto Freitas wrote:
> I'm using IBO4_5 and FireBird 1.5.
> I have a TIB_Grid based on a TIB_Query.
> With this query's SQL property it's allowed to edit fields on grid:
> SELECT
> O.DIO_CIIREG,O.DIO_DOCANO,O.DIO_DOCNUM,O.DIO_PARC,O.DIO_VENCTO,
> O.DIO_VALOR,O.DIO_BOOL,
> (SELECT D.DOC_LOTE FROM DOCUMENTO D WHERE D.DOC_CIIREG =
> O.DIO_CIIREG AND D.DOC_ANO = O.DIO_DOCANO AND D.DOC_NUM =
> O.DIO_DOCNUM) AS DOC_LOTE,
> (SELECT D.DOC_DOC FROM DOCUMENTO D WHERE D.DOC_CIIREG = O.DIO_CIIREG
> AND D.DOC_ANO = O.DIO_DOCANO AND D.DOC_NUM = O.DIO_DOCNUM) AS
> DOC_DOC,
> (SELECT I.PCI_DESCR FROM PARCERIA I WHERE I.PCI_REG = (SELECT
> D.DOC_PCIREG FROM DOCUMENTO D WHERE D.DOC_CIIREG = O.DIO_CIIREG AND
> D.DOC_ANO = O.DIO_DOCANO AND D.DOC_NUM = O.DIO_DOCNUM)) AS PCI_DESCR,
> (SELECT I.PCI_CCTCONTAF FROM PARCERIA I WHERE I.PCI_REG = (SELECT
> D.DOC_PCIREG FROM DOCUMENTO D WHERE D.DOC_CIIREG = O.DIO_CIIREG AND
> D.DOC_ANO = O.DIO_DOCANO AND D.DOC_NUM = O.DIO_DOCNUM)) AS
> PCI_CCTCONTAF,
> (SELECT P.PAR_RAZAO FROM PARCEIRO P WHERE P.PAR_REG = (SELECT
> I.PCI_PARREG FROM PARCERIA I WHERE I.PCI_REG = (SELECT D.DOC_PCIREG
> FROM DOCUMENTO D WHERE D.DOC_CIIREG = O.DIO_CIIREG AND D.DOC_ANO =
> O.DIO_DOCANO AND D.DOC_NUM = O.DIO_DOCNUM))) AS PAR_RAZAO
> FROM DIR_OBR O
> WHERE O.DIO_CIIREG= :ciireg
> ORDER BY O.DIO_BOOL DESC,O.DIO_VENCTO,O.DIO_PARC
>
> This other equivalent SQL (using JOIN clause) gives same result set,
> but it's NOT allowed to edit fields:
> SELECT
> O.DIO_CIIREG,O.DIO_DOCANO,O.DIO_DOCNUM,O.DIO_PARC,O.DIO_VENCTO,
> O.DIO_VALOR,O.DIO_BOOL,
> D.DOC_LOTE,D.DOC_DOC,D.DOC_PCIREG,I.PCI_DESCR,I.PCI_CCTCONTAF,P.PAR_R
> AZAO
> FROM ((DIR_OBR O INNER JOIN DOCUMENTO D ON O.DIO_CIIREG =
> D.DOC_CIIREG AND O.DIO_DOCANO = D.DOC_ANO AND
> O.DIO_DOCNUM=D.DOC_NUM) INNER JOIN PARCERIA I ON D.DOC_PCIREG =
> I.PCI_REG) IINER JOIN PARCEIRO P ON I.PCI_PARREG = P.PAR_REG
> WHERE O.DIO_CIIREG= :ciireg
> ORDER BY O.DIO_BOOL DESC,O.DIO_VENCTO,O.DIO_PARC
>
> So I suppose there is some kind of limitation when using JOIN clause.
> Anyway, I'm confused because with this another query using JOIN edit
> IS allowed:
> SELECT G.meg_ciireg, G.meg_metodo, G.meg_ug, G.meg_grcod,
> G.meg_trivial,
> G.meg_inc, G.meg_alt, G.meg_exc, M.met_descr as metdescr, M.met_tipo
> as mettipo
> FROM Metodo_GRP G INNER JOIN Metodo M
> ON G.meg_ciireg = M.met_ciireg AND G.meg_metodo = M.met_metodo
> WHERE (G.meg_ciireg = :ciireg) AND (G.meg_metodo >= 0)
>
> Well, what is the trick? Is there any software (IBO or FireBird?)
> limitations about this subject? What about later software versions?

Simply set KeyLinks to the primary key or a unique field combination of O (DIR_OBR) and I think the 'simple query' will become updateable in IBO.

HTH,
Set


[Non-text portions of this message have been removed]