Buenas tardes foristas
Estoy usando delphi 7, componentes ADO y como gestor de base de datos MS SQL Server 2000.
Tengo el siguiente problema, necesito capturar una excepcion del tipo EOleException y EDatabaseError y determinar que tipo de excepcion es para el manejador de la base de datos, es decir, si es por ejemplo una excepcion del tipo "violetion unique key" capturar la excepcion y mostrarle al usuario un mensaje personalizado y que lo entienda.
He buscado en el foro y lo que e encontrado no satisfe mi problema.
Otra cosa que e visto es que cuando me envia una excepcion del manejador de la base de datos me muestra tres excepciones seguidas de diferentes tipos cuando dispara la excepcion en mi entorno de desarrollo y son EoleExeption, eDatabaseError y EAccessViolation, y la ultima es la que toma en cuenta. Les adjunto el código que utilizo a ver si pueden ayudarme.
Código:
procedure TFrmMantPresenciaTecnica.btnGenerarObjetivosClick(Sender: TObject);
var
InputString, Compania, Distrito, Supervisor, sMensaje: string;
FechaInicial, FechaFinal: TDatetime;
Proceso, CantidadEsperada: integer;
begin
try
InputString:= InputBox('Digite la fecha', 'El proceso empezará a generar a partir del ' +
DateToStr(qryPresenciaTecnicaFECHA.Value) + ' Hasta la fecha que usted digite a continuacion.', '');
FechaInicial := qryPresenciaTecnicaFECHA.Value;
FechaFinal := StrToDate(inputString);
sMensaje := 'Esta seguro que desea generar desde el ' + DateTostr(FechaInicial) + ' hasta el ' + DateTostr(FechaFinal) + '.';
if MessageDlg(sMensaje,
mtConfirmation, [mbYes, mbNo], 0) = mrNo then
begin
ShowMessage('Operación cancelada por el usuario.');
Abort;
end;
if (FechaInicial >= FechaFinal) then
begin
ShowMessage('La fecha de inicio no puede ser mayor o igual a la fecha final');
Abort;
end;
FechaInicial := FechaInicial + 1;
qryPresenciaTecnica.DisableControls;
Compania := qryPresenciaTecnicaCODIGO_COMPANIA.Value;
Distrito := qryPresenciaTecnicaCODIGO_DISTRITO.Value;
Supervisor := qryPresenciaTecnicaCODIGO_SUPERVISOR.Value;
Proceso := qryPresenciaTecnicaCODIGO_PRODUCTO.Value;
CantidadEsperada := qryPresenciaTecnicacantidad_esperada.Value;
while FechaInicial <= FechaFinal do
begin
qryPresenciaTecnica.Append;
qryPresenciaTecnicaCODIGO_COMPANIA.Value := Compania;
qryPresenciaTecnicaCODIGO_DISTRITO.Value := Distrito;
qryPresenciaTecnicaCODIGO_SUPERVISOR.Value := Supervisor;
qryPresenciaTecnicaCODIGO_PRODUCTO.Value := Proceso;
qryPresenciaTecnicaFECHA.Value := FechaInicial;
qryPresenciaTecnicacantidad_esperada.Value := CantidadEsperada;
qryPresenciaTecnicaESTATUS.Value := 'REGISTRADO';
qryPresenciaTecnica.Post;
FechaInicial := FechaInicial + 1
end;
qryPresenciaTecnica.EnableControls;
Showmessage('Proceso terminado correctamente.') ;
except
{on e: Exception do
begin
Showmessage('Error Digitando la fecha.');
end;}
on e: EOleException do
begin
showmessage('ole exception')
end;
on E: EDatabaseError do
begin
showmessage('adoerror');
end;
on e: EAccessViolation do
begin
showmessage('error violacion de acceso');
end;
end;
end;
Gracias de antemano,
saludos.-