Hola a todos.
He tenido un problemón al intentar añadir datos a una BD Firebird 2.5 utilizando Codetyphon 5.40 y los componentes Zeos. El caso es que al hacer el Post (componente Zquery) me salía un error de que determinados campos que no podían ser NULL (campo requerido) no tenía asignado ningún valor. Es decir, si tienes una tabla con un campo IDTABLA requerido, con la propiedad NOT NULL y no asignas ningún valor a IDTABLA, entonces te salta un error lógico.
Hasta aquí bien, el problema es que el error me lo daba cuando sí había asignado un valor a ese campo. Asigno un valor (mediante Zquery.FieldByName('IDTABLA').asinteger=12 por ejemplo) y luego me dice que IDTABLA no puede ser NULL. Este error no me lo daba siempre, lo que es extraño, porque me hice una BD de prueba y ahí no tenía ningún error y hacía todo correcto.
El caso es que buceando en foros, he encontrado de rebote la solución. Busqué aquí en Delphiaccess y no he encontrado a nadie con un problema similar, pero en otros foros en inglés (e incluso alemán) sí que les pasaba algo parecido.
Por si a alguien le pasa en un futuro, comparto la solución que a mí me ha servido. Copio y pego unos apuntes que me he redactado yo:
dm1.ZQEntradaRegistro.Open; dm1.ZQEntradaRegistro.Insert; dm1.ZQEntradaRegistro.FieldbyName('FECHA_ENTRADA').Required:=False; // <-- Aquí dm1.ZQEntradaRegistro.FieldbyName('FECHA_ENTRADA').AsDateTime := Now; dm1.ZQEntradaRegistro.FieldbyName('HORA_ENTRADA').Required:=False; // <-- Aquí dm1.ZQEntradaRegistro.FieldbyName('IDPROYECTO').AsInteger := unit01.idproyectoactual; dm1.ZQEntradaRegistro.FieldbyName('NOTAS').AsString := 'Got with RATON'; dm1.ZQEntradaRegistro.FieldbyName('NUMERO_DATOS').AsInteger := 0; dm1.ZQEntradaRegistro.FieldbyName('NUMERO_DATOS_NULL').AsInteger := 0; dm1.ZQEntradaRegistro.FieldbyName('NUMERO_LINEAS').AsInteger := StrToInt(itotallines); dm1.ZQEntradaRegistro.FieldbyName('RESULTADO').Required:=False; dm1.ZQEntradaRegistro.FieldbyName('RESULTADO').AsInteger := 0; dm1.ZQEntradaRegistro.FieldbyName('TIPO_DATOS').AsString := '0|0|0|0|0|0|0'; dm1.ZQEntradaRegistro.Post; dm1.ZQEntradaRegistro.Close; dm1.ZConec.Commit;
Espero le sirva a alguien.
Un saludo.