Q&A

  • DBGrid에 텍스트 타입의 테이타를 뿌려줄때여..
Access 에 있는 데이터를 DBGrid에 뿌려줄려고 합니다.

데이터중에 금액 필드가 있는데여 이게 숫자가 아니고 문자형으로 되어

있거든요

이거 DBGrid 에 뿌릴때 천단위 구분해서 뿌려야 되는데

10000 ===> 10,000 ( 이런식으로요..)

검색해보니까 숫자형일 경우에는 DisplayFormat 에서 형식을 정의해 주면

된다고들 하시더군여

근데 숫자필드가 아니라서 그런지 DisplayFormat 이라는 속성은

나타나지도 않아여....  -_-;;

그리고 쿼리를 문자열로 만들어서 했거든요

QueryStr = 'Select Name, AMT.... 어쩌구 저쩌구'
Query1.Active := False;
Query1.SQL.Clear;
Query1.SQL.Add(QueryString);
Query1.Active := True;

이런식으로여..

저러고나니까 마스크에디트할라고 해도 속성이 나타나질 않아여..

어떻게 하면 텍스트로된 숫자를 천단위 구분할수 있을까여..

조언 부탁드리겠습니다

감사합니다.
1  COMMENTS
  • Profile
    머슴 2002.03.13 20:47


    Calc 필드를 한번이용해보세요...

    OnCalcFields이벤트에서....

    Calc필드를 추가... 가상의 필드를 하나 만드시는 거지요...

    그 뒤에... 함수를 이용해서.... 그 필드에.... 3자리마다 ,를 찍는 함수를
    만들어서.... 하게 되면... 문자형필드라도 ,를 찍을 수 가 있습니다...

    with DataSet do
    begin
        FieldByName('Calc').AsString := '₩'(이건옵션) +
            dispalyformat(StrTofloat (FieldByName('원래필드'));
    end;

    함수예....(이것은 숫자형에 대한 예입니다...)
    이함수를 수정하시던지 하십시요...

    function TForm1.dispalyformat(const pLength: Double): String;
    var i, cntLen,totLen,chkLen : integer;
        tmpStr,rntStr : String;
    begin
       tmpStr := floattoStr((pLength));  
       totLen := Length(tmpStr);
       IF totLen > 3 Then
          chkLen := totLen mod 3
       Else
          chkLen := 0;
       IF totLen > 3 Then
       begin
          IF chkLen = 0 then
             cntLen := Floor(totLen / 3) - 1
          Else
             cntLen := Floor(totLen / 3);
       end
       else
           cntLen := 0;
       rntStr :='';
       for i := 1 to cntLen do
       begin
       rntStr := ',' + copy(tmpStr,totLen-2,3) + rntStr;
       totLen := totLen - 3;
       end;
       rntStr := copy(tmpStr,1,totLen) + rntStr;
       Result := rntStr;
    end;