Problemas com o Campo Aggregates no CDS
Olá amigos, estou criando um campo Aggregate no CDS, e está dando um erro, segue como estou fazendo:
No CDS, marquei como TRUE o AggregatesActive.
Clique duas vezes nele, e fui em New Field, e pus o nome: SomaVlrTotal, e marquei o Aggregate.
Fui no campo criado.
Active := True;
Expression := sum(valor_total)
Visible := True;
Pois bem, ao incluir um novo registro aparece o erro:
[b:63d587f89d]Cannot access field ´SomaVlrTotal´ as type float.[/b:63d587f89d]
Meu campo valor_total, é Decimal(15,2), ou seja, está como BCDField.
O que estou fazendo de errado?
[]s
No CDS, marquei como TRUE o AggregatesActive.
Clique duas vezes nele, e fui em New Field, e pus o nome: SomaVlrTotal, e marquei o Aggregate.
Fui no campo criado.
Active := True;
Expression := sum(valor_total)
Visible := True;
Pois bem, ao incluir um novo registro aparece o erro:
[b:63d587f89d]Cannot access field ´SomaVlrTotal´ as type float.[/b:63d587f89d]
Meu campo valor_total, é Decimal(15,2), ou seja, está como BCDField.
O que estou fazendo de errado?
[]s
Titanius
Curtidas 0
Respostas
Brunolspp
24/11/2006
parece um problema de type cast.. qual o codigo da linha com erro?
eu sugiro trabalhar com double precision ao inves de decimal..
Abração
http://cc.borland.com/Author.aspx?ID=795118
eu sugiro trabalhar com double precision ao inves de decimal..
Abração
http://cc.borland.com/Author.aspx?ID=795118
GOSTEI 0
Titanius
24/11/2006
Olá Bruno, o interessante, é que não faço calculo nenhum. simplesmente coloquei lá não uso o campo para calculo nenhum. ou seja, soó coloco o valor lá. desta forma:
no OnCalc:
no BeforePost
no OnNewRecord:
Estou fazendo algo de errado? Lembrando que o sum do aggregate está pegando deste campo: cdsItensVALOR_TOTAL
[]s
no OnCalc:
cdsItensCalcValorDesconto.AsCurrency := (cdsItensPERC_DESC.AsCurrency / 100) * (cdsItensQNT.AsCurrency * cdsItensPRECO_UNIT.AsCurrency); cdsItensCalcValorAcrescimo.AsCurrency := (cdsItensPERC_ACREC.AsCurrency / 100) * (cdsItensQNT.AsCurrency * cdsItensPRECO_UNIT.AsCurrency); cdsItensCalcVlrTotal.AsCurrency := (cdsItensQNT.AsCurrency * cdsItensPRECO_UNIT.AsCurrency) - cdsItensCalcValorDesconto.AsCurrency + cdsItensCalcValorAcrescimo.AsCurrency;
no BeforePost
cdsItensVALOR_TOTAL.AsCurrency := cdsItensCalcVlrTotal.AsCurrency;
no OnNewRecord:
cdsItensVALOR_TOTAL.AsCurrency := 0;
Estou fazendo algo de errado? Lembrando que o sum do aggregate está pegando deste campo: cdsItensVALOR_TOTAL
[]s
GOSTEI 0
Brunolspp
24/11/2006
aparentemente não, ate pq eu uso direto aggregates..
quer baixar algum exemplo meu e comparar no uso?
o link: http://cc.borland.com/Author.aspx?ID=795118
no exemplo do BorCon 2006 tem aggregate no cadastro de pedido
ja tentou refazer?
Abração
quer baixar algum exemplo meu e comparar no uso?
o link: http://cc.borland.com/Author.aspx?ID=795118
no exemplo do BorCon 2006 tem aggregate no cadastro de pedido
ja tentou refazer?
Abração
GOSTEI 0
Titanius
24/11/2006
Cara, e o pior que tenho vários cadastros ]que usam o aggregate e funcionam perfeitamente... só nele tá dando problema..
Já refiz e nada... a única diferenca dele para os outros, é que nele eu tenho parametros.. tipo:
em todos os outros, eu mudo o SQL no IBQuery.... já nesse nao... o SQL está pronto. e eu passo o codigo pro parametro no CDS e mando abrir o CDS...
Será que tem algo haver com isso?
[]s
Já refiz e nada... a única diferenca dele para os outros, é que nele eu tenho parametros.. tipo:
em todos os outros, eu mudo o SQL no IBQuery.... já nesse nao... o SQL está pronto. e eu passo o codigo pro parametro no CDS e mando abrir o CDS...
Será que tem algo haver com isso?
[]s
GOSTEI 0
Djorius
24/11/2006
se soubesses o quanto eu pastei com esse problema....
enfim, faça o seguinte: em todas as referências que você ao campo no código, remova ´.AsCurrency´ e troque por ´.Value´. Dessa forma resolveu o meu problema. Veja se resolve o seu.
enfim, faça o seguinte: em todas as referências que você ao campo no código, remova ´.AsCurrency´ e troque por ´.Value´. Dessa forma resolveu o meu problema. Veja se resolve o seu.
GOSTEI 0
Titanius
24/11/2006
se soubesses o quanto eu pastei com esse problema....
enfim, faça o seguinte: em todas as referências que você ao campo no código, remova ´.AsCurrency´ e troque por ´.Value´. Dessa forma resolveu o meu problema. Veja se resolve o seu.
Valeu, mas mudei e nao resolveu... to achando muito estranho.. :(
[]s
GOSTEI 0
Djorius
24/11/2006
Existe alguma parte do código verificando se o campo é nulo? tipo: if cdsCAMPOAGGREGATE.IsNull....
isso também gerava o mesmo erro comigo.
isso também gerava o mesmo erro comigo.
GOSTEI 0
Marco Salles
24/11/2006
titanius mesmo sendo um campo agrregate , e na expressão voce colocou uma soma , voce so pode usar o resultado com asstring
Assim se voce quer resultado da soma uses
Assim se voce quer resultado da soma uses
Cds.fieldByName(´NomeDoCamppoAgrregate´).asstring;
GOSTEI 0
Titanius
24/11/2006
Olá amigos, acho que não fui muito explicativo.
O campo em questão, o aggregate, eu não faço cálculo nenhum, ele só serve pra me exibir a soma num DBText.
Eu tinha vinculado ele num DBEdit, e estava dando este erro, mudei pro DBText e parou de dar erro, estranho né?!
[]s
O campo em questão, o aggregate, eu não faço cálculo nenhum, ele só serve pra me exibir a soma num DBText.
Eu tinha vinculado ele num DBEdit, e estava dando este erro, mudei pro DBText e parou de dar erro, estranho né?!
[]s
GOSTEI 0
Marco Salles
24/11/2006
Olá amigos, acho que não fui muito explicativo.
O campo em questão, o aggregate, eu não faço cálculo nenhum,
Fui no campo criado.
Active := True;
[b:5adbb5254d]Expression := sum(valor_total) [/b:5adbb5254d]
Visible := True;
bem , para mim isto é um calculo... [b:5adbb5254d]Sum(Valor_Total)[/b:5adbb5254d]
Ou não é :?: :?: :?: :?:
O que estou fazendo de errado?
Voce fez tudo certo...
Eu tinha vinculado ele num DBEdit, e estava dando este erro, mudei pro DBText e parou de dar erro, estranho né?!
[b:5adbb5254d]muito estranho[/b:5adbb5254d]
Agora , veja o exemplo simples
procedure TForm1.Button1Click(Sender: TObject);
var
vaidarPrloblema:real;
begin
vaiDarProblema:=cds.fieldbyname(´SomaVlrTotal´´).AsFloat;
showmessage(floattostr(vaiDarProblema));
end;
bem , sendo o campo SomaVlrTotal´ Agregate ,ao exceutar as instruçoes a seguir , voce obter um erro dizendo :
[b:5adbb5254d]Cannot access field ´SomaVlrTotal´ as type float. [/b:5adbb5254d]
mas , ja se voce fizer assim
procedure TForm1.Button1Click(Sender: TObject);
var
somar:string;
begin
somar:=cds.fieldbyname(´soma´).asstring;
showmessage(somar);
end;
voce não obterá esse erro:
[b:5adbb5254d]enfim , tudo indica que voce esta em algum lugar usando , acessando o tipo Float desse campo agrregate, algo que el não possui[/b:5adbb5254d]
GOSTEI 0