Ver Mensaje Individual
  #6  
Antiguo 19-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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 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

Última edición por roman fecha: 19-10-2003 a las 08:32:21.
Responder Con Cita