PDA

Ver la Versión Completa : Como procesar la excepción de violación de clave?


ReyQ
15-09-2005, 23:38:33
Saludos, amigos, necesito ayuda. Tengo un programa escrito en Delphi 6 que lee información en archivos texto y luego de validarla, utilizando ADO, la escribe en las tablas correspondientes de una Base de Datos SQL Server 2000 (service pack 4) sobre Sistema Operativo WINDOWS 2003 server. Como es lógico, cuando alguno de mis datos ya está presente en la tabla, se produce un error de violación de clave. Conoce alguien como procesar esa excepción desde mi código en Delphi ?

dec
16-09-2005, 00:01:44
Hola,

Te ha faltado decir la clase de excepción que se levanta, pero, en todo caso, conociéndola, pienso, si no estoy equivocado completamente, en que podría hacerse algo parecido a esto:


{...}
begin
{...}
try

{
Lo que tengas que hacer que
pueda causar una excepción
}

except

on E : EClaseExcepcion do begin

// Se produjo una excepción
// del tipo que esperábamos

end;

on E : Exception do begin

// La excepción producida es
// otra, no la que pensamos

end;
end;
end;


¿Metí la pata demasiado? ¿Se notó mucho? ;)

ContraVeneno
16-09-2005, 00:59:57
try
ExecSQL; //Instrucción insert
{Tambien podría ser E:ESDEngineError o E:ESDMssError
dependiendo del rango de errores que se quieran capturar}
except on E:Exception do
if (E is EDBEngineError) then
with EDBEngineError(E).Errors[0] do
if ErrorCode = 9729 then
MessageBox(frmInicial.Handle,'Llave duplicada.','Error',MB_ICONERROR);
end; //Fin try


algo que hice alguna vez fue:

try
//instrucción insert
except on E:Exception do
if (E is EDBEngineError) then
with EDBEngineError(E).Errors[0] do
if ErrorCode = 9729 then
//instrucción update
end;//Fin try


y me gustaría su opinión al respecto, es decir, tratar de insertar la información, y si hay una violación de llave, entonces actualizar la información, ¿es correcto?, ¿válido?, ¿óptimo?

Neftali [Germán.Estévez]
16-09-2005, 10:15:55
Creo que ya está resuelto, pero hace un par de días salió éste hilo:
http://www.clubdelphi.com/foros/showthread.php?t=25175