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)
-   -   campo ID debe tener un valor (https://www.clubdelphi.com/foros/showthread.php?t=59994)

FGarcia 16-09-2008 19:10:09

campo ID debe tener un valor
 
Hola a todos!!

Tengo un bd con firebird 2.0 en forma resumida esta es una de las tablas:

Código SQL [-]
CREATE GENERATOR CONSECUTIVO;

SET GENERATOR CONSECUTIVO TO 0;
 
CREATE TABLE PRODUCTOS (
    ID             INTEGER NOT NULL,
    CODIGO         CADENAS10 NOT NULL,
    NOMBRE         CADENAS50,
    PRESENTACION   CADENAS50,
    COSTOCOMPRA    PRECIOS,
    COSTOVENTA     PRECIOS,
    OBSERVACIONES  BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET ISO8859_1
);
 
ALTER TABLE PRODUCTOS ADD CONSTRAINT UNQ1_PRODUCTOS UNIQUE (CODIGO);
 
ALTER TABLE PRODUCTOS ADD CONSTRAINT PK_PRODUCTOS PRIMARY KEY (ID);
 
/* Trigger: PRODUCTOS_BI */
CREATE TRIGGER PRODUCTOS_BI FOR PRODUCTOS
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(consecutivo,1);
end
^

Como se ve, el campo ID es autonumerico (bueno..trata se serlo) uso un trigger y un generador.

Desde mi formulario al presionar el boton de aceptar (post - dbNavigator) me regresa un mensaje de error diciendome que el campo "ID debe de tener un valor" ¿¿y eso??

Se agradece la ayuda.

Delphius 16-09-2008 19:24:25

Hola FGarcia, ¿Que componentes empleas y como lo estás enlazando?
Yo no tengo Firebird 2.0, yo trabajo con la 1.5.3 Problema de la versión no es, muy seguramente.
Me gustaría que nos describieras más detalles del caso. Y en lo posible que dieras a conocer el error exacto que te arroja.

Saludos,

lbuelvas 16-09-2008 19:28:20

Si estas trabajando con los componentes IBX, debes cambiar la propiedad Required (campo requerido) del campo ID del IBDataset a falso.

Esto es para que Delphi no pida el campo y mande la demas informacion a la base de datos y ella sea la que asige el consecutivo.

!!! Y me faltan 3 !!!

FGarcia 17-09-2008 05:11:26

Con eso de los festejos y la noticia del atentado en la Cd. de Morelia ya no regrese para aca hasta ahora (pa' desgracia y verguenza sin una gota de alcohol!! pero eso si con un buen pozole en la barriga).

Delphius y lbuelvas estoy usando Firebird 2.0 delphi 7 y los componentes IBX version 6. El mensaje de error es solo eso "Field ID must have a value".

Para todo el foro o los que lean estemensaje si alguien tiene contacto con Al Gonzalez y Cheche y sabe como se encuentran por favor comenten.

Delphius 17-09-2008 05:24:06

Ummm... ¿ya probaste lo que comentó lbuelvas? Si aún asi te sale ese error, tendré que probar... me parece extraño.

Saludos,

FGarcia 17-09-2008 19:15:48

Pues si.. ya probe y el error continua

---------------------------
Debugger Exception Notification
---------------------------
Project ABMPrueba.exe raised exception class EDatabaseError with message 'Field 'ID' must have a value'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
:(:(:(

lbuelvas 17-09-2008 19:19:20

Adjunta un archivo con un el DataModulo desde donde te conectas a la base de datos y donde esta el Dataset para colaborarte.

FGarcia 17-09-2008 22:04:25

joder!
que el asunto esta asi, tenia declarado en el Command Text editor del IBDataSet:

Código SQL [-]
select * from PRODUCTOS

Lo he cambiado por:

Código SQL [-]
select Nombre, Presentacion, Costo from PRODUCTOS

Y ha funcionado OK, Me permite la insercion de datos correctamente. Aunque aun no entiendo el porque. Ya habia declarado que el campo ID no era requerido.


un misterio para la araña!

pato_galla 01-10-2008 22:05:00

Solucion 2
 
A mi me paso algo similar... la solucion fue hacer lo que dijo lbuelvas pero desde codigo, ya que no se por que razon, cuando iniciaba el programa, se volvia a seter required en true otra vez... puede ser que sea por algun valor por defecto cuando seteaba la db en active, en fin, esa fue mi solucion, y muy util la respuesta de lbuelvas!


La franja horaria es GMT +2. Ahora son las 19:27:08.

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