Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Recuperar el ERROR de ORACLE. (https://www.clubdelphi.com/foros/showthread.php?t=44189)

crc 30-05-2007 20:03:32

Recuperar el ERROR de ORACLE.
 
Estimados:


Estoy Usando un componenete Tquery con Oracle 8, estoy realizando un INSERT a un tabla, pero por alguna motivo el Insert no funciona.

Alguien conoce alguna manera de Conocer el Codigo del Error Oracle que la transaccion me da??? :confused:


Muchas gracias y Saludos,

karlaoax 31-05-2007 16:38:58

Puedes poner el mensaje de error que te manda, y tu codigo para analizar cual es el problema, para buscar la solucion.
Con la descripcion que pones se me pueden ocurrir muchas cosas :p

crc 31-05-2007 18:31:04

Cita:

Empezado por karlaoax
Puedes poner el mensaje de error que te manda, y tu codigo para analizar cual es el problema, para buscar la solucion.
Con la descripcion que pones se me pueden ocurrir muchas cosas :p

Este es mi codigo..
procedure
TdmYaqbar01DataModule.InsertMSF012_XXXXXX01(DistrictCode,ReceiveWH,WaybillNo,WbillItemNo,StockCode,B inLocation,ReceivedDate,
TransferWH,TransferBinCode,TransferDate: string);
begin
with sqlInsertMSF012_XXXXXX01 do begin
try
Close;
Params[0].AsString := FillCharRight(' ',DistrictCode,4);
Params[1].AsString := FillCharRight(' ',ReceiveWH,4);
Params[2].AsString := WaybillNo;
Params[3].AsString := WbillItemNo;
Params[4].AsString := StockCode;
Params[5].AsString := FillCharRight(' ',BinLocation,12);
Params[6].AsString := ReceivedDate;
Params[7].AsString := FillCharRight(' ',TransferWH,4);
Params[8].AsString := FillCharRight(' ',TransferBinCode,12);
Params[9].AsString := TransferDate;
ExecSQL;
except
on E: Exception do raise Exception.CreateFmt(QY_150, [WaybillNo]);
end;
end;
end;

Me mnuestra el Erro definido para QY_150, pero yo quiero saber el ERROR de fondo que me da el SQL de insercion.. cuando insertas puede que la clave este mal o que la tabla no existe o algun otro error....ese codigo es el que quiero capturar.

Saludos,

ContraVeneno 02-06-2007 19:45:01

Código Delphi [-]
...
except on E: Exception do begin
  Showmessage(E.ClassName+' - '+E.Message+' - '+E.ErrNum);
  raise Exception.CreateFmt(QY_150, [WaybillNo]);
 end; //execption 
      end; //try

Es poco recomendable que utilizes E:Exception ya que pase lo que pase, capturaras el error y podría ser un error que no deseas. En este caso lo estamos utilizando para obtener el ClassName y el ErrNum. Pero una vez que tengas estos dos datos, lo mejor es que utilizes los mismos para capturar el error que deseas. es decir:

Código Delphi [-]
try
    ExecSQL; //Instrucción insert
except on E:EDBEngineError do begin
     If E.Errors[0].ErrorCode = 9729 then begin
      showmessage('llave duplicada');
   end else begin
      Raise;
    end; //errorcode
end; //Fin try

crc 04-06-2007 19:10:36

Muchas Gracias ContraVeneno,
El codigo funciono perfectamente :D

se agradece el tiempo y las ganas de ayudar.


La franja horaria es GMT +2. Ahora son las 10:55:34.

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