Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Abortar DELETE de una base de datos (https://www.clubdelphi.com/foros/showthread.php?t=94533)

Jose Roman 22-03-2020 19:20:53

Abortar DELETE de una base de datos
 
Cordial saludo,

Trabajo con Delphi Rio, Firebird 2.5 y FireDAC.

Tengo una tabla la cual tiene un campo correspondiente a ORDEN DE TRABAJO llamado ID_ORD y otro campo para FACTURACION llamado ID_FAC, lo que deseo es que si el usuario desea eliminar una ORDEN DE TRABAJO se verifique que no haya sido facturada, si esta facturada entonces se aborte el ELIMINAR EL REGISTRO, lo tengo con el siguiente codigo:

Código Delphi [-]
procedure TwDataModule.qOrdenBeforeDelete(DataSet: TDataSet);
begin
  if qOrdenFACTURA.Value <> '' then
  begin
    scMessageDlg('No se puede editar o eliminar una orden facturada.',mtInformation,[mbOk],0);
    qOrden.Cancel;
  end;
end;

Esta parte no hay problema y evita que el usuario pueda eliminar el registro que tenga un numero de factura, mi problema es que despues de esto se muestra un mensaje de error y no se como evitarlo, quizas estoy haciendo mal las cosas, necesito de su colaboracion. Gracias de antemano.


Neftali [Germán.Estévez] 23-03-2020 10:12:35

Cita:

Empezado por Jose Roman (Mensaje 536389)
Tengo una tabla la cual tiene un campo correspondiente a ORDEN DE TRABAJO llamado ID_ORD y otro campo para FACTURACION llamado ID_FAC, lo que deseo es que si el usuario desea eliminar una ORDEN DE TRABAJO se verifique que no haya sido facturada, si esta facturada entonces se aborte el ELIMINAR EL REGISTRO, lo tengo con el siguiente codigo


¿Porqué no utilizas las reglas de integridad de la Base de Datos para hacer eso?
Menos código y más seguro.

Si usas FOREIGN KEYS con restricción de borrado, no debes comprobar nada, simplemente capturar y tratar los posibles errores que dará el borrado para los elementos facturados.

cloayza 23-03-2020 13:41:45

Estimado utilice la función Abort().

Creo que la sugerencia de utilizar las reglas de integridad es lo mejor.

Código Delphi [-]
 
TwDataModule.qOrdenBeforeDelete(DataSet: TDataSet);
begin
  if qOrdenFACTURA.Value <> '' then
  begin
    scMessageDlg('No se puede editar o eliminar una orden facturada.',mtInformation,[mbOk],0);
    //qOrden.Cancel;
Abort() 
  end;
end;

Saludos

ecfisa 23-03-2020 15:40:40

Hola.

Por el contenido del mensaje de error, también te podría interesar revisar este enlace: error, “Object is not found” error when connected to datasets with

Saludos :)


La franja horaria es GMT +2. Ahora son las 12:37:10.

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