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)
-   -   Problemas con TIBDATASET (https://www.clubdelphi.com/foros/showthread.php?t=34860)

paty_rlopez 24-08-2006 00:53:23

Problemas con TIBDATASET
 
Hola a todos
Tengo una consulta para ustedes resulta que tengo un TIBDataSet con la siguiente consulta:
SelectSQL =
Código:


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 =
Código:


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
Cita:

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

Numero Cuenta
 
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
Código:


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

Código:


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


PINO72 29-08-2006 17:25:54

Campos Persistentes
 
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

Campo not null
 
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


La franja horaria es GMT +2. Ahora son las 06:22:18.

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