PDA

Ver la Versión Completa : key violation a veces


Rockin
15-10-2007, 21:29:34
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

pvizcay
16-10-2007, 02:41:17
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!

gluglu
16-10-2007, 10:13:12
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. ;)

Rockin
17-10-2007, 10:47:34
Muchas gracias por vuestra respuesta. voy a ver como va lo de los generadores nunca los he usado, a ver que tal.

Saludos.