COMO FAZER SOMAR COLUNA DO DBGRID, DIFERENCIANDO LETRAS E NUMEROS

23/10/2018

4

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

Lucas Araujo

Responder

Post mais votado

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);

Natanael Ferreira

Natanael Ferreira
Responder

Mais Posts

23/10/2018

Emerson Nascimento

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;
Responder

23/10/2018

Lucas Araujo

fiz o teste, e ficou zerado.. Não fez somatória..
Responder

23/10/2018

Emerson Nascimento

você precisará debugar pra ver onde está o problema.
Responder

23/10/2018

Lucas Araujo

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.
Responder

24/10/2018

Lucas Araujo

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
Responder

24/10/2018

Natanael Ferreira

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.
Responder

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

Aceitar