<div dir="ltr"><div>El filtrado de registros es bastante limitado, y lo fue siempre desde delphi.<br></div>Creo que lo mejor es hacer el firtro en el where de la consulta y traer solo que que necesitas.<br></div><div class="gmail_extra"><br><div class="gmail_quote">El 22 de febrero de 2017, 17:37, Ismael L. Donis Garcia via Lazarus-es <span dir="ltr"><<a href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">lazarus-es@lists.lazarus-ide.org</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>
<div bgcolor="#ffffff">
<div><font size="2" face="Arial">Muchas gracias Jesús pero casi estoy seguro que es
un problema del FPC.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">El campo haber no es entero ya que es un campo
donde se guarda el valor de los adeudos, por ese motivo es
monetario.</font></div>
<div><font size="2" face="Arial">Filtro para ver si una persona ya a pagado algún
tipo específico de adeudo en el año.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">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ó.</font></div>
<div> </div>
<div><font size="2" face="Arial">Antes tenía la consulta. Campo Haber como Decimal,
así está por diseño en la BD.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">select ....., a.haber, ... from creditos a
....</font> </div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">De esta forma me da error al intentar filtrar el
SQLQuery. Entonces probé de la siguiente forma:</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">
<div><font size="2" face="Arial">select ....., cast(a.haber as double
precision) as haber, ... from creditos a ....</font> </div></font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">Y de esta forma el filtro me funciona
correctamente.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">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</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">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.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">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:</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">SErrIndexBasedOnInvField = 'Field "%s" has an
invalid field type (%s) to base index on.';</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">de la unit dbconst</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">Saludos Cordiales</font></div>
<div><font size="2">========<br>| ISMAEL |<br>========</font></div>
<div>----- Original Message ----- </div>
<blockquote style="PADDING-RIGHT:0px;PADDING-LEFT:5px;MARGIN-LEFT:5px;BORDER-LEFT:#000000 2px solid;MARGIN-RIGHT:0px">
<div style="BACKGROUND:#e4e4e4;FONT:10pt arial"><b>From:</b>
<a title="lazarus-es@lists.lazarus-ide.org" href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">Jesus Reyes A. via
Lazarus-es</a> </div>
<div style="FONT:10pt arial"><b>To:</b> <a title="lazarus-es@lists.lazarus-ide.org" href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">Spanish version of Lazarus
List</a> </div>
<div style="FONT:10pt arial"><b>Cc:</b> <a title="jesusrmx@gmail.com" href="mailto:jesusrmx@gmail.com" target="_blank">Jesus Reyes A.</a> </div>
<div style="FONT:10pt arial"><b>Sent:</b> Wednesday, February 22, 2017 3:04
PM</div>
<div style="FONT:10pt arial"><b>Subject:</b> Re: [Lazarus-es] Error: Field
"Nombre_Campo" has an invalid field type (BCD) to base index on.</div><div><div class="h5">
<div><br></div>On Wed, 22 Feb 2017 13:49:13 -0600, Ismael L. Donis Garcia via
Lazarus-es <<a href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">lazarus-es@lists.lazarus-ide.<wbr>org</a>>
wrote:<br><br>
<blockquote style="PADDING-LEFT:1ex;MARGIN:0px 0px 0.8ex;BORDER-LEFT:#0000ff 2px solid">
<div><font size="2" face="Arial">Estoy tratando de filtar un SQLQuery incluyendo
un campo Decimal de Firebird 2.5 y Lazarus me devuelve el siguiente
error:</font></div>
<div> </div><font size="2" face="Arial"><font size="2">
<div>Field "Haber" has an invalid field type (BCD) to base index on.</div>
<div> </div>
<div>Si quito dicho campo no se produce el error.</div>
<div> </div>
<div>Como podré filtrar el SQLQuery con dichos tipos de campos
"Decimales"?</div>
<div>Esto es un error de Lazarus o del FPC?</div>
<div>Es posible solventarlo de alguna forma?</div>
<div> </div>
<div>dm.rssc5.Filter:='((cuenta = ' +
dm.rssc1.FieldByName('cuenta')<wbr>.AsString + ') and (subcta = ''' +
dm.rssc1.FieldByName('subcta')<wbr>.AsString + ''') and (capitulo = ''' +
dm.rssc1.FieldByName('<wbr>capitulo').AsString + ''') and (subcap = ''' +
dm.rssc1.FieldByName('subcap')<wbr>.AsString + ''') and (elemento = '''') and
(empresa = ''' + stremp + ''') and (haber > 0))'<br></div>
<div>Desde ya Gracias</div></font></font>
<div><font size="2">========<br>| ISMAEL |<br>========</font></div></blockquote>
<div><br></div>
<div>Seguro es Haber>0 y no Haber.AsInteger ?</div>
<div><br></div>
<div>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). </div>
<div><br></div>
<div>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:</div>
<div><br></div>
<div>accept := (elemento = '''') and</div>
<div> (empresa = ''' + stremp + ''')
and</div>
<div> (haber > 0) and</div>
<div>
(cuenta=dm.rssc1.FieldByName('<wbr>cuenta').AsString) and</div>
<div> (subcta = ''' +
dm.rssc1.FieldByName('subcta')<wbr>.AsString + ''') and</div>
<div> (capitulo = ''' +
dm.rssc1.FieldByName('<wbr>capitulo').AsString + ''') and</div>
<div> (subcap = ''' +
dm.rssc1.FieldByName('subcap')<wbr>.AsString + ''');</div>
<div><br></div>
<div>Jesus Reyes A.</div>
<div> </div>
</div></div><p>
</p><hr>
<p></p>______________________________<wbr>_________________<br>Lazarus-es mailing
list<br><a href="mailto:Lazarus-es@lists.lazarus-ide.org" target="_blank">Lazarus-es@lists.lazarus-ide.<wbr>org</a><br><a href="http://lists.lazarus-ide.org/listinfo/lazarus-es" target="_blank">http://lists.lazarus-ide.org/<wbr>listinfo/lazarus-es</a><br><p></p></blockquote></div>
<br>______________________________<wbr>_________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus-ide.org">Lazarus-es@lists.lazarus-ide.<wbr>org</a><br>
<a href="http://lists.lazarus-ide.org/listinfo/lazarus-es" rel="noreferrer" target="_blank">http://lists.lazarus-ide.org/<wbr>listinfo/lazarus-es</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">El que pregunta aprende, y el que contesta aprende a responder.<br><br>No a la obsolecencia programada: <a href="http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml" target="_blank">http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml</a><br><br>Linux User #495070<br><a href="http://domonetic.com/blog" target="_blank">http://domonetic.com/blog</a></div>
</div>