COMO FAZER SOMAR COLUNA DO DBGRID, DIFERENCIANDO LETRAS E NUMEROS
Bom dia, estou com problema em uma somatória, como que faz para identificar uma coluna que possa ser somada? e faze-la somar?, sendo que tem campos que possui caracteres, ai queria ignorar essas colunas de string. Porém eu tentei fazer separando o tipo de campo , se é ftInteger e ftString, mais não deu muito certo ... pois não somou numero quebrados ex(1.25)... Preciso que Identifique a coluna inteira pra somar, se é inteiro ou real.. Alguém Pode me Ajudar?
begin Total:=0; ClientDataSet1.DisableControls; ClientDataSet1.First; while not ClientDataSet1.Eof do begin Total := Total + StrToFloat(TrocaPtoPVirg(ClientDataSet1.FieldByName(Trim(lbl_campo.Caption)).AsString)); ClientDataSet1.Next; end; ClientDataSet1.First; ClientDataSet1.EnableControls; lbl_total.Caption:=''Total = ''+FloatToStr(Total); end;
Lucas Araujo
Curtidas 0
Melhor post
Natanael Ferreira
24/10/2018
Você pode tentar usar o StrToFloatDef para atribuir 0 (zero) em caso de falha na conversão (converter letras para float, por exemplo).
Total := 0; ClientDataSet1.DisableControls; ClientDataSet1.First; while not ClientDataSet1.Eof do begin Total := Total + StrToFloatDef(TrocaPtoPVirg(ClientDataSet1.FieldByName(Trim(lbl_campo.Caption)).AsString), 0); // Coloquei StrToFloatDef ClientDataSet1.Next; end; ClientDataSet1.First; ClientDataSet1.EnableControls; lbl_total.Caption := 'Total = ' + FloatToStr(Total);
GOSTEI 1
Mais Respostas
Emerson Nascimento
23/10/2018
tente assim (pode ter erros de sintaxe; não tenho Delphi instalado)
var Total: float; lCampoNumerico: boolean; nPosCampo: integer; begin try nPosCampo := ClientDataSet1.FieldByName(Trim(lbl_campo.Caption)).FieldNo; except nPosCampo := -1; end; Total := 0; lCampoNumerico := (nPosCampo >= 0) and (ClientDataSet1.Fields[nPosCampo].DataType in [ftSmallInt, ftInteger, ftWord, ftFloat, ftCurrency, ftLargeint, ftShortint, ftExtended]); if lCampoNumerico then begin ClientDataSet1.DisableControls; ClientDataSet1.First; while not ClientDataSet1.Eof do begin if not ClientDataSet1.Fields[nPosCampo].IsNull then Total := Total + ClientDataSet1.Fields[nPosCampo].AsFloat; ClientDataSet1.Next; end; ClientDataSet1.First; ClientDataSet1.EnableControls; end; lbl_total.Caption := 'Total = '+FloatToStr(Total); end;
GOSTEI 0
Lucas Araujo
23/10/2018
fiz o teste, e ficou zerado.. Não fez somatória..
GOSTEI 0
Emerson Nascimento
23/10/2018
você precisará debugar pra ver onde está o problema.
GOSTEI 0
Lucas Araujo
23/10/2018
você precisará debugar pra ver onde está o problema.
no inicio esta dando que não foi declarado.. "Total: float;" , mais mudei ele para "real" para testar...
ai mandei debugar, e não deu erro, só não faz a somatória, fica zerado a soma.
GOSTEI 0
Lucas Araujo
23/10/2018
Você pode tentar usar o StrToFloatDef para atribuir 0 (zero) em caso de falha na conversão (converter letras para float, por exemplo).
hehe testei seu procedimento, e funcionou, Obrigado.. xD
Total := 0; ClientDataSet1.DisableControls; ClientDataSet1.First; while not ClientDataSet1.Eof do begin Total := Total + StrToFloatDef(TrocaPtoPVirg(ClientDataSet1.FieldByName(Trim(lbl_campo.Caption)).AsString), 0); // Coloquei StrToFloatDef ClientDataSet1.Next; end; ClientDataSet1.First; ClientDataSet1.EnableControls; lbl_total.Caption := 'Total = ' + FloatToStr(Total);
hehe testei seu procedimento, e funcionou, Obrigado.. xD
GOSTEI 0
Natanael Ferreira
23/10/2018
Você pode tentar usar o StrToFloatDef para atribuir 0 (zero) em caso de falha na conversão (converter letras para float, por exemplo).
Total := 0; ClientDataSet1.DisableControls; ClientDataSet1.First; while not ClientDataSet1.Eof do begin Total := Total + StrToFloatDef(TrocaPtoPVirg(ClientDataSet1.FieldByName(Trim(lbl_campo.Caption)).AsString), 0); // Coloquei StrToFloatDef ClientDataSet1.Next; end; ClientDataSet1.First; ClientDataSet1.EnableControls; lbl_total.Caption := 'Total = ' + FloatToStr(Total);
hehe testei seu procedimento, e funcionou, Obrigado.. xD
Blz, amigo. Que bom que funcionou.
GOSTEI 0