Q&A

  • 한글을 쪼개지 않고 DB에 저장하는 방법


제가하고자하는작업은...



화면에 입력된 데이타를 255바이트씩 쪼게서 DB에 저장을 하고 싶습니다.



또한 255바이트째.. 한글바이트가 있을경우 문자가 쪼개지지 않게 처리하구



싶구요.



제가 초짜라서 잘 모르겠습니다. 고수님들의 답변부탁드립니다.



급하거든요....

3  COMMENTS
  • Profile
    바사기몬 2000.08.31 04:45
    델파이에서 한글문자의 앞과 끝을 알수 있는 함수는 ByteType입니다..

    델파이 Help에서 MBCS utilities를 찾으시면 이 함수에 대해서

    그리고 그 리턴값인 TMbcsByteType에 대해서 알 수 있습니다.

    그리고 샘플로 만들어 본건데요.. 저두 기억이 가물가물 해서요..

    자주 쓰지 않는것이라...

    잘 동작 하는군요... 응용하시면 원하시는 것을 만드실 수 있을거라

    생각됩니다...

    그럼 이만....



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    case ByteType(edit1.text, strtoint(edit2.text)) of

    mbSingleByte : Label1.Caption := '이것은 single Byte!';

    mbLeadByte : Label1.Caption := '이것은 한글 앞자리!';

    mbTrailByte : Label1.Caption := '이것은 한글 뒷자리!';

    end;

    end;







    zephyr wrote:

    >

    > 제가하고자하는작업은...

    >

    > 화면에 입력된 데이타를 255바이트씩 쪼게서 DB에 저장을 하고 싶습니다.

    >

    > 또한 255바이트째.. 한글바이트가 있을경우 문자가 쪼개지지 않게 처리하구

    >

    > 싶구요.

    >

    > 제가 초짜라서 잘 모르겠습니다. 고수님들의 답변부탁드립니다.

    >

    > 급하거든요....

  • Profile
    윤유섭 2000.08.31 01:02
    WideString 타입을 이용해보세요



    var S : string;

    sWide : WideString;

    Begin

    S := '가나다라1234';

    sWide := S;

    ...

    end;



    '가나다라1234' 를 WideString 으로 바꿔 COPY명령으로 한문자씩 자르면











    1

    2

    3

    4

    형식으로 한글은 2바이트 영문,숫자는 1바이트로 자를수 있습니다.



    zephyr wrote:

    >

    > 제가하고자하는작업은...

    >

    > 화면에 입력된 데이타를 255바이트씩 쪼게서 DB에 저장을 하고 싶습니다.

    >

    > 또한 255바이트째.. 한글바이트가 있을경우 문자가 쪼개지지 않게 처리하구

    >

    > 싶구요.

    >

    > 제가 초짜라서 잘 모르겠습니다. 고수님들의 답변부탁드립니다.

    >

    > 급하거든요....

  • Profile
    이은정 2000.08.31 00:23
    zephyr wrote:

    >

    > 제가하고자하는작업은...

    >

    > 화면에 입력된 데이타를 255바이트씩 쪼게서 DB에 저장을 하고 싶습니다.

    >

    > 또한 255바이트째.. 한글바이트가 있을경우 문자가 쪼개지지 않게 처리하구

    >

    > 싶구요.

    >

    > 제가 초짜라서 잘 모르겠습니다. 고수님들의 답변부탁드립니다.

    >

    > 급하거든요....









    function Get_KoreanCharPos(letter: string; WishCnt: Integer): Integer;

    var

    i, k, msb: integer;

    begin

    if System.Length(letter) < WishCnt then

    begin

    Get_KoreanCharPos := -1;

    System.Exit;

    end;



    msb := 0;

    for i := 1 to WishCnt do

    if (Integer(letter[i]) and Integer($80)) = Integer($80) then

    Inc(msb);



    if (msb mod 2) = 0 then {'$80'인것이 짝수개이면 완성된 한글문장}

    Get_KoreanCharPos := WishCnt

    else

    Get_KoreanCharPos := WishCnt - 1;

    end;





    이를 호출하여 사용하는 예제입니다



    i := Get_KoreanCharPos(data, 250);

    if i = -1 then

    Query1.FieldByName('A').AsString:= data;

    else

    Query1.FieldByName('A').AsString:= Copy(data,1,i);

    end;



    잘 응용해서 사용해 보세여..



    델파이세상(www.freechal.com/delphiworld)에 이은정(Dorothy)였습니다....

    *^^*