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

Fredy Gonzales fredyg1965 en gmail.com
Jue Feb 23 16:10:16 CET 2017


yo creo que intentes hacer el query desde un store procedure y devuelvas.
query, creo que es ub problema de conversión a la hora de la consulta.

El 23/2/2017 09:23, "Maxi via Lazarus-es" <lazarus-es en lists.lazarus-ide.org>
escribió:

El filtrado de registros es bastante limitado, y lo fue siempre desde
delphi.
Creo que lo mejor es hacer el firtro en el where de la consulta y traer
solo que que necesitas.

El 22 de febrero de 2017, 17:37, Ismael L. Donis Garcia via Lazarus-es <
lazarus-es en lists.lazarus-ide.org> escribió:

> 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 <lazarus-es en lists.lazarus-ide.org>
> *To:* Spanish version of Lazarus List <lazarus-es en lists.lazarus-ide.org>
> *Cc:* Jesus Reyes A. <jesusrmx en gmail.com>
> *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
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus-ide.org
> http://lists.lazarus-ide.org/listinfo/lazarus-es
>
>


-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada: http://www.rtve.es/noticias/
20110104/productos-consumo-duran-cada-vez-menos/392498.shtml

Linux User #495070
http://domonetic.com/blog

_______________________________________________
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/20170223/c129f102/attachment-0001.html>


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