Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   key violation a veces (https://www.clubdelphi.com/foros/showthread.php?t=49190)

Rockin 15-10-2007 21:29:34

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

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.


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