Q&A

  • Query1CalcFields 에서 계산된 내역 합계구할때
Query1 sql : select su,amt from aaa
Query1 에서 추가된 필드명 : damt
Query1 이 가지고 있는 기본 필드 su, amt

damt 필드는 amt 필드의 값이 0보다 클때에는 amt 값이 들어가고
그렇지 않을때에는 (su * amt) 값이 들어값니다.

Query1의 결과값들은 dbgrid에 나타납니다...

그렇게 해서 damt의 값을 구하고 구한 값들의 합을 리포트가 아닌 Medit 로 값을 받아
폼에 나타낼려고 합니다.
조언 부탁드립니다...

<!--CodeS-->
procedure Tfexam1.Query1CalcFields(DataSet: TDataSet);
begin
          if Query1.FieldByName('amt').AsFloat >= 0 then
          begin
                  Query1.FieldByName('damt').AsFloat  := Query1.FieldByName('amt').AsFloat;
          end
          else
          begin
                  Query1.FieldByName('damt').AsFloat  := Query1.FieldByName('amt').AsFloat
                                                                               * Query1.FieldByName('su').AsFloat;
          end;
end;
<!--CodeE-->
4  COMMENTS
  • Profile
    이상봉 2005.03.19 02:43

    방법이 여러가지가 있을것같은데요.....
    1. 먼저 쿼리를 돌리고 나서 While 문으로 Query1.First; 부터 순차적으로 돌리면서 값을 더해주는방법.
    2. 그냥단순히 쿼리문으로 Sum을 해서 구하는방법.(함수로 만들어 사용하면 좋겠죠!)
    3. Query1CalcFields에서 값을 구하는방법
        문의하신것으로 간단하게 적습니다....
    <!--CodeS-->
    // 먼저 변수선언
    1.  var
         TmpRecNum : Real;
    2.  //초기화값선언
         TmpRecNum:=0;
      
    3.  procedure Tfexam1.Query1CalcFields(DataSet: TDataSet);
         if Query1.FieldByName('amt').AsFloat >= 0 then
            begin
                 Query1.FieldByName('damt').AsFloat  := Query1.FieldByName('amt').AsFloat;
            end
            else
            begin
                Query1.FieldByName('damt').AsFloat  := Query1.FieldByName('amt').AsFloat
                                                                             * Query1.FieldByName('su').AsFloat;
            end;

         TmpRecNum:=TmpRecNum+Query1.FieldByName('damt').AsFloat;


    4.  procedure Tfexam1.Query1AfterOpen(DataSet: TDataSet);
         begin
            Edit1.Text:=FormatFloat('#,##0.#0',TmpRecNum);
         end;

    <!--CodeE-->

  • Profile
    엠피쓰리 2005.03.19 03:38
    죄송한데요...
    변수선언은 어디에서 해야 됩니까??
    계속 엉뚱한 값만 불러오고 있습니다...^^!


  • Profile
    장덕곤 2005.03.19 06:27
    procedure 와 begin 사이에 하시면됩니다

    ex)
    procedure Tfexam1.Query1CalcFields(DataSet: TDataSet);
    var 변수선언..^^
    begin

  • Profile
    이상봉 2005.03.19 17:34
    지역변수가 아니라 전역변수로 잡으셔야할것같은데요...??