Campo aggregate

14/07/2007

0

Comecei a usar campo aggregate, mas obtive um erro quando fui fazer conta de subtracao e o valor do campo aggregate estava zerado, pois é uma laço entao em determinado momento ele pode estar zerado e me retornou entao o seguinte erro: could not convert variant of type (null) into type (double), tenho que ficar testando a todo momento se existe valor no campo ? Ou existe outra forma mais simples de resolver isso ?

Obrigado


Felipeiw

Felipeiw

Responder

Posts

18/07/2007

Marco Salles

engraçado , o campo agregate não deveria mudar de valor , salvo se for
agregate com Indexação...Assim basta testar uma unica vez


Responder

18/07/2007

Felipeiw

Oi Marcos,

Nao entendi quanto ao campo agregate no mudar de valor, pois estou utilizando uma expressao sum(quant*preco), entao ele me retornara o total dos produtos do pedido, mas em determinado momento nao havera produtos entao o valor do campo agregate é zero, como faço um calculo com esse campo imaginei que, quando ele fosse zero, nao daria erro, como acontece com qualquer campo de valor, mas no caso do agregate quando este campo esta zerado retorna o erro que mencionei, diante disso tenho que ficar testar o valor do campo antes de utiliza-lo em algum calculo, isso é ruim, entao imaginei que houvesse algum tipo de ´conversao´ que resolveria isso, sem ter que testa-lo toda vez.
Obrigao


Responder

18/07/2007

Emerson Nascimento

veja se preencher a propriedade DefaultExpression [b:6fe5ef252c]do campo agregado[/b:6fe5ef252c] com 0 (zero) resolve seu problema.


Responder

18/07/2007

Marco Salles

Nao entendi quanto ao campo agregate no mudar de valor, pois estou utilizando uma expressao sum(quant*preco),


suponha que na sua tabela voce tenha

item quant preco
1 1 10
2 2 20
3 3 30

o campo agreggate cuja expressão é Sum (quant*preco) para esta tabela retorna em String o Valor de
1*10+2*20+30*30= 140 este valor é fixo


Responder

24/07/2007

Felipeiw

Mas se todos os 3 produtos forem excluidos Marcos, entao o campo sera zero, e se eu comparar esse resultado com outro valor, por exemplo para ver qual é maior, retornara o erro reportado.

Alterei a propriedade DefaultExpression, conforme sujestao do amigo emerson, mas tb nao funcionou.

Abs


Responder

25/07/2007

Marco Salles

Mas se todos os 3 produtos forem excluidos Marcos, entao o campo sera zero, e se eu comparar esse resultado com outro valor, por exemplo para ver qual é maior, retornara o erro reportado.


veja , mesmo que o os produtos [b:18455c9370]não[/b:18455c9370] sejem excluidos , o campo agrregate so ´retorna´ valores em strings.. Logo , em qualquer caso é necessário uma conversão

Assim :

cds.FieldByName(´CampoAggregate´).[b:18455c9370]asstring[/b:18455c9370] --->> Beleza cds.FieldByName(´CampoAggregate´).[b:18455c9370]asinteger[/b:18455c9370] --->>Erro



Responder

16/04/2014

Vinícius Ribeiro

Felipeiw tenta colocar esse comando dmVendas.cdsItemVenda.Next; depois que o campo que vai ser calculado receber o valor.
Responder

10/08/2021

Sady

Comecei a usar campo aggregate, mas obtive um erro quando fui fazer conta de subtracao e o valor do campo aggregate estava zerado, pois é uma laço entao em determinado momento ele pode estar zerado e me retornou entao o seguinte erro: could not convert variant of type (null) into type (double), tenho que ficar testando a todo momento se existe valor no campo ? Ou existe outra forma mais simples de resolver isso ?

Obrigado




Olá Felipeiw
Não sei se o seu problema foi resolvido, mas vou deixar 2 dicas pra ajudar a resolver.
1) Para obter o valor de qualquer capo agregate você fazer uma conversão. Pois campos agregates não são numéricos, mas sim VARIANT.
SuaVariável := cdsSeuCDS.NomeCampoAgregado.AsString;
Dessa forma você vai obter '' quando valor for = 0
Para trabalhar com números é só usar as funções de conversão nativas do Delphi (StrToInt, StrToFloat, SrtToCurr, ...)
2) Outra dica IMPORTANTÍSSIMA quando se trabalha com campos agregates é:
Verifique sempre o estado do DataSource.
If cdsSeuCDS.DataSource.State = dsEdit then
cdsSeuCDS.Post;
Caso contrário você vai estar sempre pegando o valor desatualizado.

Espero ter ajudado.

Abraços!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar