Recent

Author Topic: Error con numéricos con presición 38 en Firebird 4  (Read 2690 times)

esdonis

  • Jr. Member
  • **
  • Posts: 61
Error con numéricos con presición 38 en Firebird 4
« on: July 09, 2021, 05:16:14 pm »
Tengo una aplicación desarrollada en lasarus con Firebird 2.5.9 que funciona perfectamente.
Y he estado intentando migrarlo a Firebird 4, pero tengo problemas para obtener los datos.
Por ejemplo:
Cuando hago la siguiente pregunta, siempre devuelve 0.
if (dm.rssc3.FieldByName ('balance'). AsFloat <> 0) then netreg ();
aunque el registro no sea 0.

Edson

  • Hero Member
  • *****
  • Posts: 1302
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #1 on: July 09, 2021, 05:54:09 pm »
No recuerdo la última versión de Firebird que he manejado, pero no recuerdo haber tenido problema en valores numéricos.

De todas formas, te suguiero que identifiques dónde está el error:

¿Está en dm.rssc3.FieldByName ('balance') ?
¿Está en dm.rssc3.FieldByName ('balance'). AsFloat ?
¿Está en dm.rssc3.FieldByName ('balance'). AsFloat <> 0?

De acuerdo a eso podrás saber a dónde apuntar para resolverlo.
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

esdonis

  • Jr. Member
  • **
  • Posts: 61
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #2 on: July 09, 2021, 07:30:36 pm »
El problema está en que las librerías de lazarus no soportan numéricos con precisión 38

Es decir está al preguntar:
dm.rssc3.FieldByName ('balance'). AsFloat
que para ese tipo de campo siempre devuelve 0

ásea si digo

variable =: TSQLQuery.FieldByName ('field1'). AsFloat;

Siempre el valor de la variable va a ser 0 para este tipo de campo

Edson

  • Hero Member
  • *****
  • Posts: 1302
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #3 on: July 09, 2021, 08:00:37 pm »
Pero ¿Qué te devuelve "dm.rssc3.FieldByName ('balance')"?
¿Hay probado leerlo como texto?
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

esdonis

  • Jr. Member
  • **
  • Posts: 61
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #4 on: July 09, 2021, 08:14:32 pm »
Devuelve 0

Edson

  • Hero Member
  • *****
  • Posts: 1302
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #5 on: July 09, 2021, 08:26:55 pm »
Tendría que probarlo. ¿Tienes la descripción de tu tabla?
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

arodriguezfarfan

  • New member
  • *
  • Posts: 8
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #6 on: July 09, 2021, 08:27:44 pm »
Yo tuve el mismo problema con los campos de tipo numérico en Firebird 4. Lo que hice para solucionarlo fue convertir el campo a float en la consulta de la siguiente forma.

SELECT CAST(CAMPO AS FLOAT)
FROM TABLA

Esa fue la única manera con la cual logré solucionar el problema por el momento

esdonis

  • Jr. Member
  • **
  • Posts: 61
Re: Error con numéricos con presición 38 en Firebird 4
« Reply #7 on: July 09, 2021, 09:11:10 pm »
Yo lo solucione de forma temporal también creando un trigger dentro de la base de datos, pero eso me inhabilita usar ese tipo de precisión en los datos numéricos en esa base de datos.

Eso si con ese trigger el programa en lazarus funciona bien

CREATE TRIGGER SET_BIND_AC ACTIVE
ON CONNECT POSITION 0
AS
BEGIN
  set bind of int128 to legacy;
  set bind of decfloat to legacy;
END

 

TinyPortal © 2005-2018