PDA

Ver la Versión Completa : campo ID debe tener un valor


FGarcia
16-09-2008, 19:10:09
Hola a todos!!

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


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:


select * from PRODUCTOS


Lo he cambiado por:


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
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!