Ver Mensaje Individual
  #1  
Antiguo 15-12-2008
nachoasensio nachoasensio is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 61
Reputación: 22
nachoasensio Va por buen camino
¿Hay algo equivalente al FlushBuffers en TADODataset?

Hola:

Estoy creando una aplicación monopuesto con Turbo Delphi 2006 Explorer, Access y ADODataset. Todo funciona razonablemente bien, pero tengo un problema: antes de insertar un nuevo registro sobre un ADODataset, utilizo otro para obtener el valor máximo de un campo (select MAX(...)), de modo que sumo uno al número obtenido y uso ese resultado como valor para un nuevo campo. Con ese valor hago un insert sobre el primer dataset, lo asigno y hago un post. A veces, si hago dos inserciones muy seguidas (con un intervalo de 1 segundo o menos entre ellas) el número que obtengo es el anterior que obtuve, es decir, pese a que en los controles de datos (entre ellos un DBGrid) aparece la nueva fila con el nuevo código (y ya se ha hecho el post, dado que inserto, asigno y hago Post), éste no existe cuando el segundo ADODataset ejecuta la consulta que busca el máximo, por lo que devuelve el máximo anterior y se repite el código.

Antiguamente, con el BDE, existía un método llamado "FlushBuffers" que obligaba a Access a refrescar sus buffers y a asegurar que los datos guardados físicamente en la base de datos eran los correctos, pero este método ya no aparece con ADODataset.

Si espero 2 ó 3 segundos entre una inserción y la siguiente nunca tengo ese problema. Antes de poner un temporizador que bloquee la ejecución 3 segundos (solución "cutre" pero que funcionaría) me gustaría saber si alguien conoce la solución a este problema o el método que sustituye a FlushBuffers (si es que existe).

He probado a cerrar el primer dataset, ejecutar la consulta del segundo (la que calcula el máximo) y volver a abrir el primer dataset; también he probado a desactivarlo y activarlo (a ver si así refresca el buffer), pero no he logrado resolver el problema.

Muchas gracias por adelantado y perdonad si este problema ya se ha resuelto con anterioridad. He estado buscando por los foros y no lo he encontrado.

Saludos

Nacho
Responder Con Cita