Q&A

  • DBGrid에서 Translate error. Value out of bounds 에러가 나는 경우


DBGrid에서 Translate error. Value out of bounds 에러가 나는 경우입니다.



Field는 number타입이고 5자리인데 5자리 이상이 입력된 후에 DbGrid의 Column 에서 빠져나갈때

위와 같은 에러가 발생합니다.


onColExit이벤트에서 다음과 같이 코딩했는데 5자리 이상이 입력되면 아예 이벤트를 타지도 않더군요.

procedure TFrmARB_TCPAdmin.DBgTcpInfoColExit(Sender: TObject);
begin
   case DBgTcpInfo.Selectedindex of
      2 :
      begin
         if Length(DBgTcpInfo.Fields[2].AsString) > 5 then
         begin
            Showmessage('입력자리수를 초과했습니다.');
            DBgTcpInfo.Fields[2].AsString := '';
            DBgTcpInfo.SelectedIndex := 2;
         end;
      end;
   end;
end;

제가 코딩을 잘못한것인지 아님 다른방법이 있는지 갈쳐주세요...
4  COMMENTS
  • Profile
    석주현 2007.07.04 17:54
    올려 놓으신 TTable 이나 TQuery 에서 더블 클릭 하시면

    필드 에디터가 나옵니다.

    거기에 필드들을 추가하시고 길이 제한을 하실 필드에 프로퍼티 중 size 를 정해 주시면

    위에서 구현 하시려는 기능이 적용 됩니다. 즉, 입력 길이가 자동으로 제한 됩니다.
  • Profile
    곰탱이 2007.07.04 19:13


    답변해주셔서 감사합니다.
    한가지 더 질문을 드릴게요.
    길이제한할 필드의 프로퍼티 중 size를 정하라고 하셨는데
    오브젝트 인스펙트엔 size라는 프로퍼티가 없더군요.
    그래서 소스에서 formcreate와 query콤포의 afteropen이벤트에
    적용해봤는데 전부 에러가 나던데 어케 적용해야하는지 갈쳐주실순없는지
    아니면 예제라도 좀 부탁드릴게요....
  • Profile
    석주현 2007.07.04 19:53
    아 제가 넘버 형식이라는 걸 잘못봤군요.

    넘버 형식의 경우에 MaxValue로 제한 할 수 있긴 한데

    아마도 16비트 정수형이라 5자리를 제한할 수 없으므로

    해당 필드의 OnValidate 에서 해당 값을 비교 하신 후에 메세지를 출력 하시면 될 것 같습니다.

    Translate error. Value out of bounds  그리고 이 에러는 해당 필드가 디비에서 정의 된 것 보다
    더 큰 값을 집어 넣기 때문에 난 에러이므로 디비 설계 부분을 확인 하셔서 데이타 형을 바꿔 주셔야 합니다.

    <!--CodeS-->
    procedure TForm2.Table1SIZEValidate(Sender: TField);
    begin
      if (Sender As TField).Value > 99999 then
        ShowMessage('Error...');
    end;
    <!--CodeE-->
  • Profile
    곰탱이 2007.07.04 20:35


    답변감사합니다. (_ _)
    간단하게 제어하기힘들거라고 예상은했습니다... ㅜ_ㅜ
    데이타형변경하는것두 어제 업체담당자한테 야그했었는데 자기들 규칙이있어서 안된다네요.

    혹시나하고 질문했었는디 역시나네요....

    디비그리드의 KeyPress이벤트와 KeyDown이벤트 그리고 지역변수 몇개 선언해서

    지금 열심히 노가다하고있슴다

    다시한번 제 허접한 질문에 바쁜시간 쪼개서 답변해주셔서 감사드립니다...