PDA

Ver la Versión Completa : Recuperar el ERROR de ORACLE.


crc
30-05-2007, 20:03:32
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
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
...
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:


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.