erro filter expression incorrectly terminated
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
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
Curtidas 0
Respostas
Programaker
06/05/2005
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!
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!
GOSTEI 0
Fabriciogmuller
06/05/2005
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
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
GOSTEI 0