PDA

Ver la Versión Completa : Problema con DBExpress y Campo Autonumerico


Ezecool
14-02-2008, 23:21:15
Hola amigos, resulta que tengo un problema con un campo autonumerico (la clave primaria) en firebird 2.0, accedo via DBExpress con el driver de UIB, al hacer un alta a traves de un clientdataset y luego un ApplyUpdates me da un error acercad que el campo no puede ser nulo, cuando deberia generarlo el servidor, entiendo yo, alguien sabe cual podria ser el problema??, Desde ya muchas gracias

jachguate
14-02-2008, 23:55:30
me da un error acercad que el campo no puede ser nulo, cuando deberia generarlo el servidor, entiendo yo, alguien sabe cual podria ser el problema??

El campo, en delphi, tiene la propiedad required a true.

Aún así tendrás el problema que el registro cambiará de clave primaria en la base de datos, con lo que si tu aplicación trata de localizarlo recién insertado, no tendrá la manera de hacerlo, y eso derivará en un nuevo error.

La solución para esto es asignar los valores, leyendolos desde el generador, justo antes de insertarlos, en tu aplicación delphi, y no esperar que se asignen en la base de datos.

Hasta luego.

;)

Ezecool
15-02-2008, 00:28:44
Gracias jachguate, olvide mencionar que una de las primeros chequeos que hice fue justamente poner en false el required del campo, no obstante me gusta mas la idea de leer el valor del generador y enviar todo el registro completo, sin embargo me gustaria poder hacerlo sin que esto signifique que se incremente automaticamente la secuencia al leer, como ocurre, ya que podria darse una caso de que no se graben los datos y la secuencia se abria incrementado de todos modos, sabes alguna forma de leer el valor del generador sin incrementarlo? Muchas gracias

jachguate
15-02-2008, 01:14:29
Podes obtener el valor del generador sin alterarlo llamando a gen_id con un cero (0) como segundo parámetro.

Claro, es algo que no recomiendo, puesto que te puede dar problemas de concurrencia.

Para evitar llamar al generador "por gusto", podrías intentar hacerlo justo en el momento anterior a que el registro se inserte realmente en la base de datos, pero como las cosas aún asi pueden fallar, realmente tu aplicación no debiera depender de que no hayan saltos en las llaves primarias.

Hasta luego.

;)

Ezecool
15-02-2008, 12:48:36
Tienez razon con eso de no depender de los saltos en la clave primaria, realmente para muchos casos no es importante, no lo habia tenido en cuenta, te agradezco tu colaboracion :)