PDA

Ver la Versión Completa : Problemas con TIBDATASET


paty_rlopez
24-08-2006, 00:53:23
Hola a todos
Tengo una consulta para ustedes resulta que tengo un TIBDataSet con la siguiente consulta:
SelectSQL =

select ce.*, bb.BANCO, bc.NUMERO_CUENTA, g.id_grupo, e.CVE_EMPRESA
from CUENTAS_ELECTRONICAS ce, BANCO__BANCO bb, BANCO__CUENTA bc, GRUPO g, empresa e
where ce.ID_CUENTA = bc.ID_CUENTA
and bc.ID_BANCO = bb.ID_BANCO
and bc.ID_GRUPO = g.ID_GRUPO
and g.ID_EMPRESA_LIDER = e.ID_EMPRESA

InsertSQL =

insert into CUENTAS_ELECTRONICAS
(ID_CUENTA, STATUS, FECHA_CAPTURA, CAPTURADOR)
values
(:ID_CUENTA, :STATUS, :FECHA_CAPTURA, :CAPTURADOR)

El problema es que cuando quiero agregar un registro con la instrucción INSERT o APPEND me manda el siguiente error
Field 'NUMERO_CUENTA' must have a value

¿Por que me manda ese error si ni siquiera se encuentra en el InserSQL?
¿Qué es lo que estoy haciendo mal?

Gracias por su respuesta.

PINO72
27-08-2006, 22:15:42
HOLA,

¿Has creado el campo NUMERO_CUENTA como clave primaria?, si es así, siempre deberá tener un valor en cualquier inserción que quieras realizar en la tabla.

Saludos.

paty_rlopez
28-08-2006, 15:54:31
Hola PINO72:
El campo Numero_cuenta efectivamente en su tabla está como que no acepta un null, lo que hice fue asignarle un valor antes de post del componente en el que está la consulta que muestro al inicio, lo que me parece muy raro y aun no logro entender, es por que me pide un valor para ese campo si ni siquiera se encuentra en la tabla donde hago el insert, como lo muestro en la consulta del Insert, si me pudieras explicar el ¿por que? de que tenga que agregarle un valor al campo antes del post, te lo agradeceré mucho.

Lepe
28-08-2006, 16:06:52
Asegurate de que no tienes el campo persistente numero_cuenta. Cuando le das doble clic al Ibdataset aparece la lista de campos ¿no? borralo. Lo más seguro es que haciendo pruebas se haya quedado ahí.

De momento es lo que se me ocurre.

Saludos

paty_rlopez
28-08-2006, 19:01:53
No tengo ningun campo persistente. lo solucioné de esta manera

dsCuentasElectronicas.DataSet.FieldByName('STATUS').AsString := 'ACTIVO';
dsCuentasElectronicas.DataSet.FieldByName('NUMERO_CUENTA').AsString := lCuenta.Text;
dsCuentasElectronicas.DataSet.FieldByName('ID_GRUPO').AsInteger := lEstacion.KeyValue;
dsCuentasElectronicas.DataSet.FieldByName('CVE_EMPRESA').AsString := lEstacion.Text;


Agregandoles un valor a los campos que me decia que no podias tener un valor NULL aunque no formen parte de mi query de insercion


insert into CUENTAS_ELECTRONICAS
(ID_CUENTA, STATUS, FECHA_CAPTURA, CAPTURADOR)
values
(:ID_CUENTA, :STATUS, :FECHA_CAPTURA, :CAPTURADOR)

PINO72
29-08-2006, 17:25:54
Hola de nuevo...

La solución es más lógica que otra cosa.

Las reglas de negocio que se incluyen al crear la estructura de las tablas dentro de nuestra base de datos se apoyan en un mejor control de los datos que en el futuro deben contener los registros.

Si insertamos un registro en la tabla sin informar a Interbase del contenido del campo creado como "primary key", es como insertar un valor nulo en este campo y despues agregar el registro, lo que conlleva al error directo del motor de Interbase para salvaguar la integridad de los datos.

no sé si me he explicado bien...
Saludos

djemix
31-08-2006, 10:09:04
Hola, mira si el campo ese esta puesto como Not null. Cuando haces un insert en una tabla y solo rellenas unos campos y no todos, el motor de firebird se encarga de rellenar los otros campos que no has puesto en el insert y les pone null. Si tienes un campo con el check not null te va a dar error siempre ahi.
Intenta no arreglar el programa con parchecillos del estilo... "pos ahora pongo esto en el post"....
Revisa la estructura de la base de datos antes de hacer esos arreglillos jejeje

Saludosssss!! :D