key violation a veces
Tengo un pequeño problema y no encuentro la solucion.
Inserto datos en un dataSet en un campo id(tipo key). antes de insertar muevo el dataset al ultimo registro con dataSet.last y cojo el valor del campo id. AL inserta utilizo ese valor almacenado en la variable nuevoid, lo asigno asi: FIBDataSetICCSVentas.FieldByName('id').AsInteger:= idbnuevo + 1. Me funciona bien, pero si ejecuto una consulta de ventas entre fecha y luego quiero insertar una nueva venta me da el key violation. NO se si el problema es que no me refresca el dataset o no me mueve al ultimo registro. Es un poco lioso, a ver quien puede tener algo de idea. Gracias de antemano |
usa los generadores para las claves.. (secuencias en el standard de sql) están fuera del marco de las transacciones y son precisamente para esto que se crearon.. si necesitas una secuencia de numeros sin espacios la implementación es más complicada..
suerte! |
Aparte de recomendarte expresamente el uso de generados, tal y como se indica, ya que están al margen de las transacciones y por tanto te evitaran problemas que si no los utilizas los tendrás MAS QUE SEGURO, te quiero hacer dos comentarios a tu pregunta :
Te debes de asegurar que la consulta que obtienes esté ordenada por ese campo que quieres incrementar. Cuando consultas entre fechas, evidentemente no tienes porqué obtener todos los registros existentes, y por lo tanto si vas a coger el último número + 1 no tiene porqué ser el número que buscas ya que ese número ya puede existir al haber consultado entre márgenes de fechas, y por tanto te saltará el error. Consejo : Olvídate por completo de ese método y estudia el tema de los generadores. ;) |
Muchas gracias por vuestra respuesta. voy a ver como va lo de los generadores nunca los he usado, a ver que tal.
Saludos. |
La franja horaria es GMT +2. Ahora son las 20:58:45. |
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