Ver la Versión Completa : 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
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
Muchas Gracias ContraVeneno,
El codigo funciono perfectamente :D
se agradece el tiempo y las ganas de ayudar.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.