[Lazarus-es] Error: Field "Nombre_Campo" has an invalid field type (BCD) to base index on.

Ismael L. Donis Garcia slibre en natio.co.cu
Mie Feb 22 21:37:12 CET 2017


Muchas gracias Jesús pero casi estoy seguro que es un problema del FPC.

El campo haber no es entero ya que es un campo donde se guarda el valor de los adeudos, por ese motivo es monetario.
Filtro para ver si una persona ya a pagado algún tipo específico de adeudo en el año.

Analizando me di cuenta "o al menos pienso yo" que es un problema del FPC ya que me puse a analizar el error y cambié la consulta y me funcionó.

Antes tenía la consulta. Campo Haber como Decimal, así está por diseño en la BD.

select ....., a.haber, ... from creditos a .... 

De esta forma me da error al intentar filtrar el SQLQuery. Entonces probé de la siguiente forma:

select ....., cast(a.haber as double precision) as haber, ... from creditos a .... 

Y de esta forma el filtro me funciona correctamente.

Por ese motivo es que creo que es un problema de tipos del FPC que no está definido los tipos de campos DECIMALES de firebird

No probé lo que me dijiste del filtro en el evento OnFilterRecord ya que el filtro es dinámico, ósea cambia según los datos devueltos por la consulta.

Yo solo en la pregunta puse un caso específico de filtro, pero de todos modos se podría probar a ver que pasa, pero estoy casi seguro que va a fallar por el error:

SErrIndexBasedOnInvField = 'Field "%s" has an invalid field type (%s) to base index on.';

de la unit dbconst


Saludos Cordiales
========
| ISMAEL |
========
----- Original Message ----- 
  From: Jesus Reyes A. via Lazarus-es 
  To: Spanish version of Lazarus List 
  Cc: Jesus Reyes A. 
  Sent: Wednesday, February 22, 2017 3:04 PM
  Subject: Re: [Lazarus-es] Error: Field "Nombre_Campo" has an invalid field type (BCD) to base index on.


  On Wed, 22 Feb 2017 13:49:13 -0600, Ismael L. Donis Garcia via Lazarus-es <lazarus-es en lists.lazarus-ide.org> wrote:


    Estoy tratando de filtar un SQLQuery incluyendo un campo Decimal de Firebird 2.5 y Lazarus me devuelve el siguiente error:

    Field "Haber" has an invalid field type (BCD) to base index on.

    Si quito dicho campo no se produce el error.

    Como podré filtrar el SQLQuery con dichos tipos de campos "Decimales"?
    Esto es un error de Lazarus o del FPC?
    Es posible solventarlo de alguna forma?

    dm.rssc5.Filter:='((cuenta = ' +  dm.rssc1.FieldByName('cuenta').AsString + ') and (subcta = ''' +  dm.rssc1.FieldByName('subcta').AsString + ''') and (capitulo = ''' +  dm.rssc1.FieldByName('capitulo').AsString + ''') and (subcap = ''' +  dm.rssc1.FieldByName('subcap').AsString + ''') and (elemento = '''') and (empresa = ''' + stremp + ''') and (haber > 0))'

    Desde ya Gracias
    ========
    | ISMAEL |
    ========


  Seguro es Haber>0 y no Haber.AsInteger ?


  En caso de que este no sea el caso y Haber es una variable entera derivado de Haber.asInteger entonces es probable sea un problema de implementación en sqldb (o sea FPC). 


  Aún podrías filtrar el dataset usando el evento OnFilterRecord, cuando haces dataset.Filtered := true, se dispara el evento OnFilterRecord para cada uno de los registros, en este evento solo tienes que regresar accept := true/false; y de esta manera el registro aparecerá o no como parte del dataset. En tu caso quizás se podría implementar de esta manera:


  accept := (elemento = '''') and
            (empresa = ''' + stremp + ''') and
            (haber > 0) and
            (cuenta=dm.rssc1.FieldByName('cuenta').AsString) and
            (subcta = ''' +  dm.rssc1.FieldByName('subcta').AsString + ''') and
            (capitulo = ''' +  dm.rssc1.FieldByName('capitulo').AsString + ''') and
            (subcap = ''' +  dm.rssc1.FieldByName('subcap').AsString + ''');


  Jesus Reyes A.



------------------------------------------------------------------------------


  _______________________________________________
  Lazarus-es mailing list
  Lazarus-es en lists.lazarus-ide.org
  http://lists.lazarus-ide.org/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170222/e39f4a57/attachment.html>


Más información sobre la lista de distribución Lazarus-es