Hola a todo el mundo que lea esto..hace algun tiempo escribí un post referente a la actualización de interbase, ahora mi problema es algo más grave....intentaré exponer con total claridad:
he creado en el ibconsole una tabla de clientes tal como sigue
create table clientes (
codcli integer not null,
....,
....,
primary key (codcli))
y por otro lado tengo otra tabla creada tb en IB llamada direcciones de entrega que no es más que un detalle de la tabla anterior...su codigo es el siguiente
create table direntrega(
codcli integer not null,
coddirentrega integer not null,
...,
...,
...,
primary key (codcli,coddirentrega)
y aquí es donde viene el meollo del tema...originalmente puse en este mismo create table lo siguiente
foreign key (codcli) references clientes(codcli) on delete cascade on update cascade
ok...hasta aquí no debiera de estar mal (por favor, corregidme)
he aqui que cuando estoy en mi aplicacion cliente, al borrar un registro del master (estan bien enganchados los datasets) me da el error
violation foreing key constraint "....." on table direntrega
esto solo ocurre cuando:
abro el formulario del master
creo un registro
pulso el boton del formulario detalle
creo un registro
salgo del formulario detalle (hago commitRetaining) y en el ibconsole se ve como se actualiza todo
y una vez que he vuelto al formulario master
y le doy a borrar registro
plaf!!!!
mensajito!!!!!
Esta es una llamada de desesperacion porque no sé qué puede ocurrir.
Una alternativa que tambien he probado es utilizando triggers tal como sigue
create trigger tborrar on clientes active after delete as
begin
delete from direntrega where codcli=old.codcli
end
y ...evidentemente si utilizo trigger borro el foreign key...pero aun así...mensajito....
Alguien ha estado en la misma situación?
Alguien tiene implementado en interbase un master detalle y sea tan amable de postear su código que elimina?
Alguien me puede explicar la filosofia de interbase en cuanto a cómo actúa para el ejemplo de eliminación de registros?
Sé que si se lanza el trigger en el server, en mi cliente (programa delphi) no se va a mostrar el dataset del detalle actualizado por ello en el evento afterdelete del dataset de clientes hago un
dsfdirentrega.close
dsfdirentrega.open
y posteriormente commitRetaining o RollbackRetaining (un try)
En fin....por favor ayudadme si teneis esa sabiduria...es importante pq stoy en una fase donde ahora me enfrento a muchos master/detail
Gracias de antemano