Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-10-2008
M. FM. M. FM. is offline
Miembro
 
Registrado: ago 2007
Posts: 37
Poder: 0
M. FM. Va por buen camino
Red face OnPostError no salta en ClientDataSet

Buenas tardes:

Estoy intentando evitar un error de key violation en un ClientDataSet antes de llegar al ApplyUpdates. Mi código es el siguiente:
Código Delphi [-]
try   
  cdsLineas.Post;   
  cdsLineas.ApplyUpdates(-1); 
except   
  TrataError(self, Exception(ExceptObject)); 
end;

Además, tengo definido un procedimiento para el evento OnPostError y otro para OnReconcileError, ambos del ClientDataSet cdsLineas. El problema es que no me está saltando el error en el Post, sino en el ApplyUpdates. No pasa por el procedimiento TrataError ni por el definido para el OnPostError.

Antes de esto, intenté arreglarlo directamente en el evento OnReconcileError, que sí salta, pero el problema es que si le asigno la acción raCancel me borra todos los datos que había escrito, y si le asigno raSkip luego se comporta de forma extraña con el registro corregido y creado (me da error si luego intento borrarlo).

¿Alguna idea de por qué el Post no da error?

Muchas gracias por la ayuda,
M.
Responder Con Cita
  #2  
Antiguo 20-10-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Código Delphi [-]
 
cdsLineas.ApplyUpdates(0);

Trata con esto a ver si te saca error.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #3  
Antiguo 21-10-2008
M. FM. M. FM. is offline
Miembro
 
Registrado: ago 2007
Posts: 37
Poder: 0
M. FM. Va por buen camino
Muchas gracias, mightydragonlor, pero me temo que todo sigue igual. Acabo de probarlo y aún no pasa por el PostError.

Por otra parte, debería pasar por él justo después del post, sin llegar al ApplyUpdates, ¿no? :-(

Voy a volver a buscar información sobre el tema, a ver si encuentro algo que me ilumine.

Gracias
Responder Con Cita
  #4  
Antiguo 21-10-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Otra causa a este problema es el tipo de dataset al que estas intentando acceder, si nos muestras el error completo podremos ayudarte.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 22-10-2008
M. FM. M. FM. is offline
Miembro
 
Registrado: ago 2007
Posts: 37
Poder: 0
M. FM. Va por buen camino
El DataSet es un TClientDataSet y el error que quiero capturar es de clave duplicada. Mi problema es que el error aparece en el ApplyUpdates, pero no en el Post.

Quiero capturarlo antes para que no se me borren todos los datos que estoy introduciendo del nuevo registro. Es decir, que deje al usuario cambiar el número de registro (que es el índice que se está duplicando) y volver a intentar el alta. Ahora mismo, tras saltar el key violation en el ApplyUpdates, se está borrando todo.

Muchas gracias por tu ayuda
Responder Con Cita
  #6  
Antiguo 22-10-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
tal vez no me expliqué bien, el TClientDataSet se conecta mediante un TDataSetProvider a otro DataSet, ya sea TIBQuery, TIBSQL, TADOTable o cualquier otro, un error común que sucede es ligar un TClientDataSet a un TIBTable, ya que siempre muestra un error en el ApplyUpdates, por lo menos a mi me ha ocurrido, pero lo soluciono ligandolo con un TIBQuery, espero te sirva de algo la información, si puedes copiar exactamente el error que te sale tal vez podremos solucionarlo.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #7  
Antiguo 22-10-2008
M. FM. M. FM. is offline
Miembro
 
Registrado: ago 2007
Posts: 37
Poder: 0
M. FM. Va por buen camino
Perdona, no te había entendido. Se conecta a un TSQLTable de dbExpress. ¿Puede ser ese componente el que tiene el problema?

Yo pensaba que tendría que ver directamente con el TClientDataSet, pero si me dices que puede partir del otro, intentaré mirar si es un bug conocido o si es mi programa el que está mal.

Muchas gracias de nuevo
Responder Con Cita
  #8  
Antiguo 22-10-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
exactamente ese es el problema, cambialo por el TSQLQuery y se debe arreglar el problema.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #9  
Antiguo 24-10-2008
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Poder: 0
Ana María Va por buen camino
hola, en realidad no tiene que ver con que sea un TSLTable o TSLQuery, ese no es el problema, tampoco lo es el ClientDataset.
La cuestión es que el conjunto de datos del ClientDataset solo se carga en memoria y no tiene forma alguna de saber si hay o nó una clave duplicada hasta que la actualización o inserción hayan ido hasta la propia base de datos, es por eso que la excepción no se dispara en Post sinó en ApplyUpdates.

Lo que debes hacer es manejar la excepción en OnReconcileError y la acción a realizar es raAbort que no te va a borrar absolutamente nada.

Espero te sirva de algo.
Responder Con Cita
  #10  
Antiguo 28-10-2008
M. FM. M. FM. is offline
Miembro
 
Registrado: ago 2007
Posts: 37
Poder: 0
M. FM. Va por buen camino
Smile

Muchas gracias a los dos.

Es verdad que no depende del TSQLTable, probé con un TSQLQuery y me daba el mismo error. Al final he tenido que quitar la función para OnPostError porque no servía de nada, pero tras el OnReconcileError, con la acción raAbort, se me están conservando los datos, que es lo que quería.

Gracias de nuevo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ADOTable no entra a OnPostError. bernabe Varios 2 17-10-2007 22:38:23
Ayuda en el evento OnPostError de un ADOTable n03l Varios 16 30-04-2007 19:35:26
Codigos de error en OnPostError Luis Castillo Conexión con bases de datos 3 05-10-2005 22:03:07
No entra al evento OnPostError Pablo Carlos Conexión con bases de datos 27 24-04-2005 23:22:07
OnPostError en un TQuery Wascar Conexión con bases de datos 4 19-04-2005 00:15:24


La franja horaria es GMT +2. Ahora son las 03:20:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi