Ver Mensaje Individual
  #3  
Antiguo 08-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Reputación: 0
coso Va por buen camino
Si. El metodo locate implica un post.

El problema q tienes es q el DBEdit es q ya actualiza la base de datos (hace un 'post') al salir, por lo que si el 'codigo' ya existe, te genera el error de 'valores duplicados' antes de llegar a tu codigo para encontrar el error. En otras palabras, el error q estas intentando 'pillar' lo detecta el servidor de base de datos antes. Deberias colocar el mensaje de error en el evento onPostError de la tabla, olvidandote de comprobar si ya existe ese codigo o no. Si lo que quieres es algo mas concreto, deberias buscar para 'cazar' excepciones.

Un par de cosas que he visto q tambien son extrañas:

- Si haces un locate, estas reposicionando el cursor en la base de datos por lo que si tienes la opcion UpdateWhereAll activada (que me parece q es por defecto), en el momento de salir estas cambiando el valor del dbedit antes que se actualizen los cambios.

- Veo un Table.Edit pero no veo ningun post. Parece q dejas abierta la tabla en modo edicion. Lo correcto (para q no te pasen errores como este, pues si la dejas en Table.State = dsEdit te puede pasar de todo) es hacer

Table.Edit;
Table.FieldValues['NOMBRE'] := 'nombre de ejemplo';
Table.FieldValues['TEL'] := '9355555555';
...
Table.Post;

Al entrar a los dbedits, estos automaticamente abren la tabla en modo edicion, y al salir postean, por lo que es innecesario incluir ese edit aqui.

La mejor manera de hacer estas cosas es no usar los dbedits, y si usar el evento onexit de un edit normal y corriente, editando como te ponia antes. Si te empeñas con los dbedit, no uses el locate o filtros o nada parecido dentro de ellos (ni el next, prior, ni indexfieldnames...) pues si mueves el cursor de la base de datos ya la pifiaste

PD: borland dejo de desarrollar sobre las TTable porque tenian (y provocaban) infinidad de bugs, te recomiendo q uses SQL, es mucho mas sencillo trabajar con ello


Venga, espero haberte servido de ayuda

Última edición por coso fecha: 08-05-2008 a las 00:47:04.
Responder Con Cita