Eliminar registro de dos tablas al mismo tiempo

Necesito con urgencia una información...
Deseo eliminar el registro en dos tablas al mismo tiempo.. Por ejemplo.. Tengo mi tabal documentos y la tabla Historicodocumento, quiero que al dar clic en eliminar me elimine automáticamente en las dos tablas.. Pero no me pasa eso... Sigue siempre el registro.- Mi código que puse es este...
De antemano mil gracias
Integer respuestad
noficio = sle_nreg.text
respuestad = messagebox("Mensaje", "Seguro de Eliminar el Reg", Exclamation!,YesNo!,2)
If respuestad =1 then
DECLARE EliminarDocumento PROCEDURE FOR EliminarDocumento
@NOficio = Noficio ;
execute EliminarDocumento;
wf_verificasql( )
DECLARE EliminarHistorico PROCEDURE FOR EliminarHistoricoDocumento
@NOficio = Noficio ;
execute EliminarHistorico;
wf_verificasql( )
Messagebox("Mensaje","Dato Eliminado")
Else
Messagebox("Mensaje"," Dato No Eliminado")
End if
Respuesta
1
Al momento de eliminar, primero debes eliminar el histórico, ya que es en esta tabla donde el nro de documento esta como foreign key, luego recién deberías eliminar, de lo contrario, solo se estará eliminando el histórico y no el documento. Ejecuta
Execute EliminarHistorico
Y luego
Execute Eliminar Documento

6 respuestas más de otros expertos

Respuesta
1
Supongo que noficio es de tipo numérico, si es así
Realízala de esta manera:
Integer respuestad
Long noficio
noficio = Long(sle_nreg.text)
respuestad = messagebox("Mensaje", "Seguro de Eliminar el Reg", Exclamation!,YesNo!,2)
If respuestad =1 then
DELETE FROM documentos
WHERE num_oficio = :noficio;
DELETE FROM historicodocumento
WHERE num_oficio = :noficio;
COMMIT;
Messagebox("Mensaje","Dato Eliminado")
Else
Messagebox("Mensaje"," Dato No Eliminado")
END IF
Respuesta
1
Esta buena la idea del stores (¿en qué base estas trabajando?); Debes considerar que para eliminar un registro relacionado como en tu caso debes empezar por los hijos y luego los padres. Adicionalmente en tu función wf_verificasql() ¿Qué haces?
En tu store tendrias algo asi, ORACLE
Begin
delete historico documento
EXCEPTION WHEN OTHERS THEN
RAISE_APPLICATION(-20001,'No se pudo eliminar el registro historico'||sqlerrm);
END;
BEGIN
delete documento
EXCEPTION WHEN OTHERS THEN
RAISE_APPLICACION_ERROR(-20002,'No se pudo eliminar el registro del documento'||sqlerrm);
END;
Respuesta
1
Solo cambiale la lógica, es decir primero debes eliminar el histórico y luego el documento, seguramente te esta emitiendo un error de referencia al momento de eliminar el documento y por eso no te borra ninguno de los dos, porque el histórico hace referencia al documento, manejale como un maestro detalle. Hay errores que en el sstema no se visualiza pero al momento de depurar se puede observar, si sigues con el problema me indicas
Respuesta
1
Disculpa por la demora pero la respuesta es:
Bueno en primer lugar los procedimientos no se ejecutan así,
las primeras lineas están bien pero las de parámetros es donde es la falla
y porque doble caja de texto de eliminación, y cual de los registros no se eliminan o acaso no se elimina ni uno porque esas linea de cogido están bien, los porcediemitnos están fallando más bien
Respuesta
1
Es más fácil colocar los SQL embebidos directamente en el código... por ejemplo:
delete from tabla where campo = noficio;
IF SQLCA.SQLCode= 0 then
    delete from tabla2 where campo = noficio;
END IF
Respuesta
-1
Integer respuestad
noficio = sle_nreg.text
respuestad = messagebox("Mensaje", "Seguro de Eliminar el Reg", Exclamation!,YesNo!,2)
If respuestad =1 then
connect using sqlca;
delete from documentos
where documentos.valor =:noficio;
delete from historicodocumentos
where hostoricodocumentos.valor =:noficio;
commit using sqlca;
End if
Nota: Valor es el campo con el que comparas en la base de datos.
Connectusing es para conectarse a la base de datos
commit para completar la ejecución del delete.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas