<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta content="MSHTML 6.00.2900.5512" name="GENERATOR">
<style></style>

<style type="text/css">body { font-family:'DejaVu Sans Mono'; font-size:13px}</style>
</head>
<body bgcolor="#ffffff">On Wed, 22 Feb 2017 13:49:13 -0600, Ismael L. Donis Garcia via Lazarus-es <lazarus-es@lists.lazarus-ide.org> wrote:<br><br><blockquote style="margin: 0 0 0.80ex; border-left: #0000FF 2px solid; padding-left: 1ex">
<div><font face="Arial" size="2">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 face="Arial" size="2"><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').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))'<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('cuenta').AsString) and</div><div>          (subcta = ''' +  
dm.rssc1.FieldByName('subcta').AsString + ''') and</div><div>          (capitulo = ''' +  
dm.rssc1.FieldByName('capitulo').AsString + ''') and</div><div>          (subcap = ''' +  
dm.rssc1.FieldByName('subcap').AsString + ''');</div><div><br></div><div>Jesus Reyes A.</div><div> </div></body></html>