Ver Mensaje Individual
  #3  
Antiguo 05-03-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Reputación: 23
AzidRain Va camino a la fama
Me parece que lo correcto es dejar que el motor mismo haga el trabajo de validar los datos. Si la tabla esta bien diseñada, Codigocuenta debe estar definido como índice único por lo que el motor mismo no permitirá duplicarlo.

Ahora bien, solo hay que capturar la posible excepción y trabajar en consecuencia:

Código Delphi [-]
  ADOQuery.SQL.Text := 'insert codigocuenta into mitabla';
  Try
    ADOQuery.ExecSQL;
 except
   //si ocurrió una excepción seguramente es por que ya existe el código.
  // aquí procesamos el error que en este caso solo sería mostrar un mensaje menos
  // críptico que el del motor
 end;

En este ejemplo obviamente hay que trabajar un poco lo que se captura con except porque como lo puse se captura cualquier excepción que genere el motor, tendríamos que hacer el manejador muy escífico para capturar solo las excepciones del tipo Key-violation. Sin embargo si lo pruebas así te debe funcionar bien además de que queda más legible.
Tienes que tener en cuenta el ámbito del try..except de manera que lo que pongas en el except efectivamente haga algo para manejar el problema, por ejemplo podría darle el foco al control que contenga la clave duplicada y mandar el mensaje al usuario.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita