Fórum erro filter expression incorrectly terminated #280497

06/05/2005

0

ola

estou com um problema quando vou realizar um locate numa tabela de memoria (clientdataset)

uso um ibquery para trazer os registros do servidor, selecionando por data. uso um union all, mas ele traz alguns registros duplicados. para resolver isso uso um locate no clientdataset.

if not ClientDataSet1.Locate(´GRUPO´,IBQuery1GRUPO.asstring,[]) then
begin
ClientDataSet1.append;
ClientDataSet1[´Grupo´]:=IBQuery1GRUPO.AsString;
ClientDataSet1[´Lucro´]:=IBQuery1LUCRO.AsCurrency;
ClientDataSet1[´Custo´]:=IBQuery1CUSTO.AsCurrency;
ClientDataSet1[´Porcentagem´]:=IBQuery1PORCENTAGEM.AsFloat;
ClientDataSet1[´QuantItems´]:=IBQuery1QUANTITEMS.AsFloat;
ClientDataSet1[´Venda´]:=IBQuery1VENDA.AsCurrency;
ClientDataSet1.Post;
end
else
begin
Custo:=ClientDataSet1Custo.AsCurrency+IBQuery1Custo.AsCurrency;
Venda:=ClientDataSet1Venda.AsCurrency+IBQuery1VENDA.AsCurrency;
ClientDataSet1.Edit;
ClientDataSet1[Lucro´]:=ClientDataSet1Lucro.AsCurrency+IBQuery1LUCRO.AsCurrency;
ClientDataSet1[´Custo´]:=Custo;
ClientDataSet1[´Porcentagem´]:=((Venda*100)/Custo)-100;
ClientDataSet1[´QuantItems´]:=ClientDataSet1QuantItems.AsFloat+IBQuery1QUANTITEMS.AsFloat;
ClientDataSet1[´Venda´]:=Venda;
ClientDataSet1.Post;
end;

isto funciona, somando os campos duplicados e mostrando-os apenas uma vez. o que acontece eh que em determinadas datas acontece um erro no locate - filter expression incorrectly terminated.

o qual nao consigo resolver, pois ocorre somente em datas especificas.

alguem jah passou por isso e sabe como resolver?

obrigado
fabricio


Fabriciogmuller

Fabriciogmuller

Responder

Posts

08/05/2005

Programaker

Seguinte: o union all que você está usando para trazer os dados traz mesmo os registros duplicados; é pra isso mesmo que ele serve, fazer a união de tabelas sem descartar as reprises.

Se a duplicidade de registros está te dando essa trabalhão todo, porque você não usa apenas o union, que une as tabelas excluindo as duplicatas?

Só queria sacar a real necessidade do union all antes de entrar no lance do locate, porque pode ser que esse código com problemas nem seja necessário e esteja te dando dor de cabeça à toa.

Té mais!


Responder

Gostei + 0

09/05/2005

Fabriciogmuller

dae cara

blz?

eh q na verdade utilizei o union all pq os dados sao pegos de duas tabelas separadas... se pelo menos ele somasse os campos na hora de agrupar, realmente, teria me poupado mta dor de cabeca...

mas consegui resolver o problema... na propriedade indexfieldnames do clientdataset coloquei o campo grupo e ao inves do locate usei o findkey([ibquery1grupo.asstring])...

funcionou que eh uma beleza :D

abraco
fabricio


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar