Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con DBExpress y Campo Autonumerico (https://www.clubdelphi.com/foros/showthread.php?t=53245)

Ezecool 14-02-2008 23:21:15

Problema con DBExpress y Campo Autonumerico
 
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

Cita:

Empezado por Ezecool (Mensaje 266020)
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

Gracias
 
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 :)


La franja horaria es GMT +2. Ahora son las 20:00:47.

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