Ver Mensaje Individual
  #5  
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
Gracias por el consejo.

No puedo usar un campo autoincrementable porque, en access, producen "saltos" si, por ejemplo, insertas un registro y luego no confirmas la inserción. Necesito tener un control completo sobre el número, dado que es un identificador "oficial". De hecho, si se borra el registro con el número más alto, ese valor será el siguiente nuevo número, algo que no puede hacerse con los autoincrementados (al menos de forma directa).

Hace muchos años trabajé con Delphi 4 e interbase y éra mucho más sencillo, pero esta miniaplicación tiene que funcionar como interfaz de usuario para una base de datos access preexistente, lo que complica bastante las cosas...

Por ahora lo he resuelto con el timer (3 segundos), pero es una chapuza. Todos los intentos de cerrar datasets, refrescarlos (el Refresh no funciona con los ADO, no sé por qué), ir al primero y luego al último (para que lo recorra todo), buscar y asignar el valor justo antes del post del insert (como sugirió luisgutierrezb), ... no ha funcionado. Es como si el ADODataset necesitase, a veces, ese segundo para grabar físicamente en access, pese a que en el dbgrid y los dbedit aparece la información y el registro es relativamente pequeño, quedando esos registros en una situación extraña, dado que son idénticos entre sí (la tabla no tiene clave primaria ), por lo que luego el ADODataset no los puede eliminar...

Todo parece apuntar al viejo problema de los buffers de access, pero al no tener ya disponible el FlushBuffers...

Saludos

Nacho
Responder Con Cita