Cita:
Posteado originalmente por viajero2015
Hola roman oye gracias pro tu ayuda eh, peor sabes no me dio resultado el vento no me sigue cogiendo la excepcion esa yo con TTable si me da el error peor con AdoTable no nada, ni contu ejemplo a ti te se ejecuto bien el evento posterror del esa tabla ADO?
sin embargo probe con
try
post;
Except
mensaje()
y ok peor en el mismo formulario peor quiero hacerlo como dios manda
esto me tiene loco, saludos TOMAS
|
Vamos a tratar de desmenuzar esto porque
debe haber una explicación. Estuve un rato mirando el grupo de noticias
borland.public.delphi.database.ado y hay varias menciones acerca de problemas con OnPostError como, por ejemplo, que no se dispara si el LockType de la tabla está en BatchOptimistic, o mejor dicho, se dispara sólo hasta que se llama a ApplyUpdates. No obstante no parece ser tu problema.
De cualquier forma
lo primero será determinar
perfectamente si el evento se dispara o no:
Coloca un
breakpoint justo al comienzo del evento:
Código:
procedure TForm1.ADOTablePostError(...);
begin // <-- breakpoint aquí (F5)
...
end;
Ejecuta la aplicación y fuerza un error. Si se detiene en el punto marcado (y yo sospecho que así será) querrá decir que el problema es que por alguna razón no se cumplen las condiciones del
case.
Originalmente hice la prueba usando como proveedor de la conexión el que pone por defecto:
Microsoft OLE DB Providerfor ODBC Drivers
y todo funcionó correctamente con las constantes E_DB_KEYVIOLATION y E_DB_REQUIREDFIELD que puse anteriormente.
Pero después cambié de proveedor a
Microsoft Jet 4.0 OLE DB Provider
y ¡sorpresa! no se dispararon mis mensajes sino que de vuelta obtuve los que da por defecto.
Sin embargo
sí que entraba al evento, sólo que las condiciones no se cumplían: ¡las constantes eran otras!
Buscando en el grupo de noticias ví que los códigos de error dependen tanto de la base de datos misma como del proveedor.
Si estás en este caso, es decir si sí entra al evento pero no cumple las condiciones entonces lo único que debes hacer es investigar cuáles son las constantes correctas. Yo lo hice con mi método favorito
Caption := IntToStr(AdoConnection.Errors[0].NativeError);
y generando cada uno de los errores que me interesan (seguro que en algún lugar debe venir la documentación pero desconozco dónde). Por ejemplo, para Microsoft Jet 4.0 obtuve estos otros valores:
Código:
E_DB_KEYVIOLATION = -105121349;
E_DB_REQUIREDFIELD = -541331061;
Por otro lado, si en el peor de los casos resulta que
realmente no entra al evento (y te reitero que primero que nada verifiques muy bien esto) lo que yo haría es olvidarme del proyecto por un momento y comenzar con una aplicación limpia, colocando un AdoConnection, un AdoTable, un DataSource, un DBGrid y nada más. Salvo la cadena de conexión del AdoConnection no cambiar
ninguna propiedad y ver qué pasa. Si sí funciona ir cambiando las propiedades que hayas cambiado en el proyecto original (si es que hiciste algún cambio).
Bueno, como verás no es una ayuda muy concreta pero es como yo procedería si tuviera que usar ADO, Access y desconociera ambos-- y tal es el caso
// Saludos