PDA

Ver la Versión Completa : Capturar Excepciones


dmagui
29-11-2005, 15:50:15
Buenos Días:

Bueno mi problema es el siguiente en una grilla estoy creando unos proveedores especificos para unos productos,

Se pueden Crear uno o mas proveedores con sus respectivos campos que son el costo, arancel, modalidad de compra.

Cuando creo un proveedor, continuo a crear el siguiente proveedor, y por algun caso decidi devolverme al registro anteriormente creado, me sale una excepcion, ya que no he llenado todos los datos que son obligatorios, pero lo que pasa es que quiero capturar la excepcion, pero lo malo es que no se en que evento hacerlo, lo prove en el evento de la grilla OnKeyUp.

Pero no funciono.

Gracias por la ayuda que me puedan prestar.:confused:

marcoszorrilla
29-11-2005, 15:52:59
Es que la excepción no te la devuelve la rejilla, sino el motor de base de datos y es ahí en donde tienes que capturar la excepción.

Un Saludo.

dmagui
29-11-2005, 16:51:37
Si tienes toda la Razón las Excepciones las genera el motor de datos, lo que pasa es que en el aplicativo que estoy haciendo desde delphi, quiero cambiar el mensaje que me sale, por ejemplo cuando en la base de datos esta el codigo 15 de producto, y al crear un nuevo producto y lo creo con el mismo codigo,

me sale una excepción que me dice quee violación de llave primaria, esto no lo va a entender el usuario entonces lo que hago es lo siguiente:


try
begin
//Intrucciones para que guarde el nuevo producto
end
except
on E:Exception do
if E.ClassNameIs('EDataBaseerror')then
raise Exception.Create('Datos Insuficientes Para Crear El producto')
else
if E.ClassNameIs('EIBInterbaseError')then
raise Exception.Create('Codigo Repetido')
end;


Entonces eso es lo mismo que quiero hacer, cambiar el mensaje, pero con el manejo de las flechas no se en donde debo colocar por ejemplo lo escrito anteriormente, para que la excepción me lo muestre con el mensaje que quiero hacer.

Lepe
29-11-2005, 16:56:53
Dicho de otra forma: la orden tabla.Post deberá estar en un try ... except para poder capturar la excepción.

O bien usas sysutils.Abort para cancelar los cambios realizados.

saludos

dmagui
29-11-2005, 17:46:01
eso es lo que estoy haciendo, pero cuando uso las flechas para desplazarme en la grilla no me captira la excepción correspondiente.

Lepe
29-11-2005, 18:22:45
Al estar el mensaje en el foro OOP no hay forma de saber que base de datos usas, y aún menos cuando capturas excepciones de Delphi y de Interbase.

Dinos qué base de datos es y como accedes a ella.

saludos

dmagui
29-11-2005, 19:34:12
Estoy utilizando Delphi Professional e Interbase 6.0

Estoy accediendo a la Base de Datos por medio de las componentes IBTransacction y IBDataBase, en general estoy utilizando las IBx

AzidRain
29-11-2006, 04:48:19
No puede poner el try en Post porque usa una grilla, la grilla hace el post en forma automática cada vez que cambias de fila y si se modificó algun campo.

En el caso de un TDataset comun y corriente esto que quieres hacer se hace modificando el manejador de eventos OnPostError, que se ejecuta cada vez que se levanta una excepción por errores al hacer el post.

Ignoro si se puede hacer con componentes de IB ya que no los tengo instalados...pero la idea es hacer que quien detecte la excepcion sea tu dataset y cancele lo que se posteó.