Campo aggregate
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
Obrigado
Felipeiw
Curtidas 0
Respostas
Marco Salles
14/07/2007
engraçado , o campo agregate não deveria mudar de valor , salvo se for
agregate com Indexação...Assim basta testar uma unica vez
agregate com Indexação...Assim basta testar uma unica vez
GOSTEI 0
Felipeiw
14/07/2007
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
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
GOSTEI 0
Emerson Nascimento
14/07/2007
veja se preencher a propriedade DefaultExpression [b:6fe5ef252c]do campo agregado[/b:6fe5ef252c] com 0 (zero) resolve seu problema.
GOSTEI 0
Marco Salles
14/07/2007
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
GOSTEI 0
Felipeiw
14/07/2007
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
Alterei a propriedade DefaultExpression, conforme sujestao do amigo emerson, mas tb nao funcionou.
Abs
GOSTEI 0
Marco Salles
14/07/2007
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
GOSTEI 0
Vinícius Ribeiro
14/07/2007
Felipeiw tenta colocar esse comando dmVendas.cdsItemVenda.Next; depois que o campo que vai ser calculado receber o valor.
GOSTEI 0
Sady
14/07/2007
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
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!
GOSTEI 0