Fórum Problemas com o Campo Aggregates no CDS #333661

24/11/2006

0

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


Titanius

Titanius

Responder

Posts

24/11/2006

Brunolspp

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


Responder

Gostei + 0

24/11/2006

Titanius

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:
  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


Responder

Gostei + 0

24/11/2006

Brunolspp

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


Responder

Gostei + 0

24/11/2006

Titanius

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


Responder

Gostei + 0

24/11/2006

Djorius

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.


Responder

Gostei + 0

24/11/2006

Titanius

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


Responder

Gostei + 0

24/11/2006

Djorius

Existe alguma parte do código verificando se o campo é nulo? tipo: if cdsCAMPOAGGREGATE.IsNull....

isso também gerava o mesmo erro comigo.


Responder

Gostei + 0

24/11/2006

Marco Salles

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

Cds.fieldByName(´NomeDoCamppoAgrregate´).asstring;



Responder

Gostei + 0

25/11/2006

Titanius

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


Responder

Gostei + 0

25/11/2006

Marco Salles

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]


Responder

Gostei + 0

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

Aceitar