n° 219
Novembre 2017
Dicembre 13, 2017, 05:35:48 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Gestione delle eccezioni - Risolto  (Letto 4980 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Frank56
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 2


Mostra profilo
« inserita:: Agosto 05, 2012, 05:50:09 »

Salve a tutti, ho un problema con la gestione delle eccezioni durante il tentativo di cancellare un record da una tabella.

Premetto che sono un neofita di Delphi, ho cominciato a lavorarci da 15 giorni circa!!!

Sto cercando di fare il porting di un’applicazione, sviluppata qualche anno fa con il Developer 6i della Oracle, in Delphi 2010. Il database è l’Oracle 10g express edition, e visto che non ho mai avuto problemi ho deciso di continuare ad usarlo anche con Delphi. Per la connessione al database sto usando ORACLE DATA ACCESS COMPONENT della Devart.

Scendo più in dettaglio nel problema.

Ho una tabella CLIENTI e una tabella FATTURE (master), tra le quali c’è, ovviamente, un vincolo di integrità referenziale sulla colonna CODICE CLIENTE.
Quando tento di cancellare dalla tabella CLIENTI un cliente che è presente nella tabella fatture ricevo, come è giusto che sia, il seguente messaggio di errore:

GestoDProj.exe raised exception class EOraError with message ‘ORA-02292: restrizione di integrità violata, chiave figlia trovata.

Sto cercando di gestire l’eccezione nel seguente modo:

procedure TFClienti.my_Del;
  begin
    if messagedlg('Cancellare il record ?', mtWarning, [mbOk, mbNo],0, mbNo) = mrOk then
      try
        begin
          DM_Gesto.OT_Clienti.Delete;
        end
      except
        on EOraError do
          begin
            Dialogs.MessageDlg('Attenzione!!! Cliente non cancellabile!!!', mtError, [mbOk], 0, mbOk);
          end
        else
          begin
            Dialogs.MessageDlg('Attenzione!!! Record non cancellabile!!!', mtError, [mbOk], 0, mbOk);
          end
      end;
  end;

Però l’eccezione non viene intercetta e mi viene riproposto il messaggio di errore esposto in precedenza.
Dove sto sbagliando ?  Che?!?
Grazie
Ciao
Registrato
Marco Breveglieri
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 61



Mostra profilo WWW
« Risposta #1 inserita:: Agosto 06, 2012, 06:19:03 »

Sei sicuro che il messaggio di errore non venga visualizzato solo perché stai facendo debugging in Delphi?

Hai provato ad eseguire il programma all'esterno dell'IDE?
Registrato

MARCO BREVEGLIERI
Sviluppo Software e Web
Consulenza e corsi di programmazione

http://www.marco.breveglieri.name
Frank56
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 2


Mostra profilo
« Risposta #2 inserita:: Agosto 06, 2012, 08:57:28 »

Ciao Marco, in effetti non avevo provato fuori dall'Ide, perché non pensavo che il comportamento sarebbe stato differente. Occhi al cielo
Invece fuori dall'Ide il tentativo di cancellazione viene intercettato e il programma non va in errore.

Un grandissimo grazie per la dritta!!!  Sorriso

Ciao
Registrato
QuagliaNicola
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 1


Mostra profilo
« Risposta #3 inserita:: Ottobre 04, 2012, 11:02:43 »

Ciao , di buona norma quando si intercetta un'eccezione...

try
  // tuo codice
except
   On E: EOraError do
   begin
      ShowMessage(E.Message);
      // fai qualcosa...
      // E è un oggetto istanziato di tipo EOraError..
   end;
end;

Spero ti possa esssere di aiuto

Nicola Quaglia
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines