Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Update de un DBGrid que contiene JOIN (https://www.clubdelphi.com/foros/showthread.php?t=18450)

gluglu 12-02-2005 13:03:27

Update de un DBGrid que contiene JOIN
 
Hola !

Tengo un DBGrid asociado al siguiente IBQuery1:
Código SQL [-]
select R.SEASONCODE,  S.CODENAME, S.NAME
  from RATES_DATES R, SEASONSTYPE S
  where R.SEASONCODE = S.CODENAME
Mi problema es que al insertar un registro nuevo o modificar el existente en el DBGrid correspondiente, no me cambia de manera automática la columna del nombre (que viene dada por S.NAME).

Utilizo el siguiente IBUpdateSQL:
Insert
Código SQL [-]
insert into RATES_DATES
  (SEASONCODE)
values
  (:SEASONCODE)
junto con Modify
Código SQL [-]
update RATES_DATES
set
  SEASONCODE = :SEASONCODE
where
  INTERNALNO = :OLD_INTERNALNO
Cual debería ser el contenido correcto del IBUpdateSQL para que me funcione correctamente y se actualice correctamente la columna del nombre en el DBGrid al modificar o insertar ?

Un cordial saludo.

Delfino 12-02-2005 21:31:34

Porque no utilizas un IBDataset?
a mi me hizo un comportamiento similar pero cuando tenia definido en IB un campo calculado, quite la definicion y crei el campo calculado con Delphi con Autcalcfields y se soluciono..

gluglu 13-02-2005 11:56:29

Esto es lo que pone en el manual de InterBase :
Cita:

For updates to joins (queries involving two or more tables), you must provide one
Cita:

TIBUpdateSQL object for each table involved, and you must use the OnUpdateRecord event handler to invoke these objects to perform the updates.
Lo que no sé es qué poner en el TIBUpdateSQL de la segunda tabla y en el evento OnUpdateRecord.

gluglu 14-02-2005 18:04:25

He encontrado :p una explicación bastante detallada de este problema y como solucionarlo en el libro de Marco Cantú.

Al final he utilizado un IBDataSet (como recomendaba Delfino), pero debe de funcionar igualmente con un IBQuery y un IBUpdateSQL asociado. El secreto está en el apartado Refresh correspondiente.

A continuación os detallo el comando Select completo que utilizo y el Refresh necesario. De esta manera el DBGrid se actualiza de manera automática en el mismo momento que se cambie el campo clave.
Código SQL [-]
select R.BUILDINGNO, R.RATENO, R.INTERNALNO,
  R.SEASONCODE, S.CODENAME, S.NAME
  from RATES_DATES R LEFT JOIN SEASONSTYPE S
   on R.SEASONCODE = S.CODENAME
   where R.RATENO = :RATENO and R.BUILDINGNO = :BUILDINGNO
   order by R.SEASONCODE
El correspondiente Refresh que debe ir asociado es
Código SQL [-]
select R.BUILDINGNO, R.RATENO, R.INTERNALNO,
  R.SEASONCODE, S.CODENAME, S.NAME
  from RATES_DATES R LEFT JOIN SEASONSTYPE S
   on R.SEASONCODE = S.CODENAME
   where R.INTERNALNO = :INTERNALNO
   and R.RATENO = :RATENO and R.BUILDINGNO = :BUILDINGNO


La franja horaria es GMT +2. Ahora son las 11:16:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi