Q&A

  • DbGrid 사용시 특정 Field의 DisplayFormat
DbGrid 에 Query 한 결과를 Display 할때 특정 Field 에 Mask 를 주고 싶습니다.

고수님들의 조언 부탁 드립니다.



아래 .....



with FSaleDispDMFrm.WorkSql do

begin

Close;

SQL.Clear;

SQL.Add('Select a.Sd_Code as pCode, b.Fn_Name as pName, Sum(a.Sd_Qty) as sQty, ');

SQL.Add(' Sum(a.Sd_Amt) as Amount, Sum(a.Sd_Vat) as Vat, Sum(a.Sd_Total) as Total ');

SQL.Add(' From SaleDetail as a, Final as b ');

SQL.Add('Where (a.Sd_Code = b.Fn_Code) and (a.Sd_Date >= :T_SSdDate) and (a.Sd_Date <= :T_ESdDate) ');

SQL.Add('Group By a.Sd_Code, b.Fn_Name ');

ParamByName('T_SSdDate').AsString := DateToStr(SOutDate.DateTime);

ParamByName('T_ESdDate').AsString := DateToStr(EOutDate.DateTime);

Open;

end;



위의 쿼리결과를 디비그리드에 뿌려주는데 Sum 한 결과인 sQty, Amount, Vat, Total 등을 콤마를 찍어서 보여주고 싶습니다. (예 sQty 가 1234567 인 경우 1,234,567 으로)

답변 부탁드립니다.



4  COMMENTS
  • Profile
    irookie 2001.08.22 03:50
    0. object inspector에서 query active를 true로 한다.(당연히 sql문이 있어야 겠죠)

    1. query콤포넌트에서 마우스 오른쪽 클릭.

    2. field editor선택.

    3. 실행된 창에서 마우스 오른쪽 클릭

    4. add fields선택.

    5. 원하는 field를 모두선택한다.

    6. 화면에 sQty, Amount, Vat, Total ....등등이 보인다.

    7. 예를들어 sQty 선택.

    8. object inspector를 본다.

    9. Display format property에 ###,###,###,##0 이라 적는다.

    10. 나머지두 똑같이...

    11. 끝



    휴~~~우~~~

    -----------





    임상욱 wrote:

    > DbGrid 에 Query 한 결과를 Display 할때 특정 Field 에 Mask 를 주고 싶습니다.

    > 고수님들의 조언 부탁 드립니다.

    >

    > 아래 .....

    >

    > with FSaleDispDMFrm.WorkSql do

    > begin

    > Close;

    > SQL.Clear;

    > SQL.Add('Select a.Sd_Code as pCode, b.Fn_Name as pName, Sum(a.Sd_Qty) as sQty, ');

    > SQL.Add(' Sum(a.Sd_Amt) as Amount, Sum(a.Sd_Vat) as Vat, Sum(a.Sd_Total) as Total ');

    > SQL.Add(' From SaleDetail as a, Final as b ');

    > SQL.Add('Where (a.Sd_Code = b.Fn_Code) and (a.Sd_Date >= :T_SSdDate) and (a.Sd_Date <= :T_ESdDate) ');

    > SQL.Add('Group By a.Sd_Code, b.Fn_Name ');

    > ParamByName('T_SSdDate').AsString := DateToStr(SOutDate.DateTime);

    > ParamByName('T_ESdDate').AsString := DateToStr(EOutDate.DateTime);

    > Open;

    > end;

    >

    > 위의 쿼리결과를 디비그리드에 뿌려주는데 Sum 한 결과인 sQty, Amount, Vat, Total 등을 콤마를 찍어서 보여주고 싶습니다. (예 sQty 가 1234567 인 경우 1,234,567 으로)

    > 답변 부탁드립니다.

    >

  • Profile
    임상욱 2001.08.22 04:14
    irookie 님 답변 감사드립니다.



    그런데 답변해주신 내용은 설계할때 WorkSql 쿼리에 Sql 문이 있어야 하지요...

    하지만 WorkSql 쿼리는 실행할때에 동적으러 Sql 문이 들어갑니다.

    이 WorkSql 쿼리는 다른 용도로도 사용되거든요..

    다시한번 감사드리며 한번 더 답변 부탁드립니다.

    감사합니다.



    irookie wrote:

    > 0. object inspector에서 query active를 true로 한다.(당연히 sql문이 있어야 겠죠)

    > 1. query콤포넌트에서 마우스 오른쪽 클릭.

    > 2. field editor선택.

    > 3. 실행된 창에서 마우스 오른쪽 클릭

    > 4. add fields선택.

    > 5. 원하는 field를 모두선택한다.

    > 6. 화면에 sQty, Amount, Vat, Total ....등등이 보인다.

    > 7. 예를들어 sQty 선택.

    > 8. object inspector를 본다.

    > 9. Display format property에 ###,###,###,##0 이라 적는다.

    > 10. 나머지두 똑같이...

    > 11. 끝

    >

    > 휴~~~우~~~

    > -----------

    >

    >

    > 임상욱 wrote:

    > > DbGrid 에 Query 한 결과를 Display 할때 특정 Field 에 Mask 를 주고 싶습니다.

    > > 고수님들의 조언 부탁 드립니다.

    > >

    > > 아래 .....

    > >

    > > with FSaleDispDMFrm.WorkSql do

    > > begin

    > > Close;

    > > SQL.Clear;

    > > SQL.Add('Select a.Sd_Code as pCode, b.Fn_Name as pName, Sum(a.Sd_Qty) as sQty, ');

    > > SQL.Add(' Sum(a.Sd_Amt) as Amount, Sum(a.Sd_Vat) as Vat, Sum(a.Sd_Total) as Total ');

    > > SQL.Add(' From SaleDetail as a, Final as b ');

    > > SQL.Add('Where (a.Sd_Code = b.Fn_Code) and (a.Sd_Date >= :T_SSdDate) and (a.Sd_Date <= :T_ESdDate) ');

    > > SQL.Add('Group By a.Sd_Code, b.Fn_Name ');

    > > ParamByName('T_SSdDate').AsString := DateToStr(SOutDate.DateTime);

    > > ParamByName('T_ESdDate').AsString := DateToStr(EOutDate.DateTime);

    > > Open;

    > > end;

    > >

    > > 위의 쿼리결과를 디비그리드에 뿌려주는데 Sum 한 결과인 sQty, Amount, Vat, Total 등을 콤마를 찍어서 보여주고 싶습니다. (예 sQty 가 1234567 인 경우 1,234,567 으로)

    > > 답변 부탁드립니다.

    > >

  • Profile
    성더기 2001.08.22 04:24
    동적으로 쿼리가 들어가는 경우라면 DisplayFormat을 사용할 수가 없지여..

    곤란하시겠네여..^^



    그리드 DrawColumnCell이벤트에 다음과 같이 코딩해 보세여

    var

    TmpStr : string;

    begin

    TmpStr := FormatFloat('#,##0', Amount); // 다른값들도 이런식으로 하면될검다

    with DBGgrid1.Canvas do

    begin

    if DataCol = 1 then // 1이라는 숫자는 값이 출력되는 컬럼입니다

    begin

    FillRect(Rect);

    TextOut(Rect.Left+(Rect.Right - Rect.Left - TextWidth(TmpStr)), Rect.Top,IntToStr(TmpStr));

    end;

    end;

    end;

  • Profile
    임상욱 2001.08.22 19:12
    진심으로 감사드립니다.

    덕분에 해결이 되었네요...

    그럼 즐거운 통신 되시길...



    성더기 wrote:

    > 동적으로 쿼리가 들어가는 경우라면 DisplayFormat을 사용할 수가 없지여..

    > 곤란하시겠네여..^^

    >

    > 그리드 DrawColumnCell이벤트에 다음과 같이 코딩해 보세여

    > var

    > TmpStr : string;

    > begin

    > TmpStr := FormatFloat('#,##0', Amount); // 다른값들도 이런식으로 하면될검다

    > with DBGgrid1.Canvas do

    > begin

    > if DataCol = 1 then // 1이라는 숫자는 값이 출력되는 컬럼입니다

    > begin

    > FillRect(Rect);

    > TextOut(Rect.Left+(Rect.Right - Rect.Left - TextWidth(TmpStr)), Rect.Top,IntToStr(TmpStr));

    > end;

    > end;

    > end;