Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-10-2007
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 21
Rockin Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 16-10-2007
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
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!
Responder Con Cita
  #3  
Antiguo 16-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 17-10-2007
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 21
Rockin Va por buen camino
Muchas gracias por vuestra respuesta. voy a ver como va lo de los generadores nunca los he usado, a ver que tal.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
OnMouseWheel se me ejecuta 3 veces gluglu Varios 2 06-04-2007 01:24:34
Imprimir dos veces agora18 Impresión 8 22-12-2006 20:51:07
A veces MS da pena... marceloalegre Noticias 9 03-02-2006 21:58:53
A veces si, a veces no buitrago Firebird e Interbase 0 28-02-2004 03:05:13
4 veces casada José Luis Garcí Humor 0 19-06-2003 11:44:42


La franja horaria es GMT +2. Ahora son las 15:05:24.


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
Copyright 1996-2007 Club Delphi