우리팀은 ADO와 MIDAS를 사용해서 3tier로 프로그램을 개발 중입니다.
근데 이상한 현상을 발견해서 조언 부탁드립니다.
우선 서버 프로그램에
1) ADOConnection1을 갖다 놓고, connection은 SQL OLE DB 방식으로 연결하고,
2) ADOQuery1.SQL에
'SELECT CUST_NO, NAME FROM CUST_MASTER WHERE NAME LIKE :pSearch'라고 입력하고, parameter는 ptInput, ftString으로 정의합니다.
3) DataSetProvider1를 연결한 후,
클라이언트 프로그램에는
1) SocketConnection1을 연결하고,
2) ClientDataSet1에 DataSetProvider1을 연결합니다.
3) ClientDataSet1에 pSearch라는 Parameter를 만든 후 pdInput, ftString으로 정의한다음,
4) ('%' + Edit1.Text '%')를 pSearch Parameter로 넘기게 합니다.
CUST_MASTER:
---------------------
CUST_NO NAME
---------------------
1 콩쥐
2 강남콩
3 완두콩
4 메콩강
5 홍콩여자
6 땅콩강정
클라이언트를 실행시킨 후
1)검색어를 '콩'으로 입력하고 실행시키면:
결과:
강남콩
완두콩
2)검색어를 '남콩'으로 입력시키고 실행시키면:
결과:
3)검색어를 '남콩뿅'으로 입력시키고 실행시키면:
결과:
강남콩
참 미칠 노릇이지요?
패턴을 잘 보면,
1)의 예에서는 '%콩%'가 서버로 가는데, 이는 바이트 수로 4바이트입니다.
그러나 결과 값은 마치 '%콩' 만 넘어간 것 갖지요. 즉 3바이트만 갔습니다.
3)의 예에서는 결과는 원래 NULL이어야 하는데 '강남콩'이 나오지요.
그 뜻은, '%남콩뿅%', 즉 8바이트 대신 '%남콩' 이 넘어간 것입니다. 즉 5바이트만 갔습니다.
흠냐... 한글 캐릭터는 2바이트라는 것을 모르나봐요... 그래서 '%콩%'는 3글자이지만 4바이트인데도 3바이트만 가고,
'%남콩뿅%'은 5글자이지만 8바이트인데도 불구하고 5바이트만 갑니다.
지금은 어거지로 모자라는 만큼 뒤에다 빈칸을 채워 너서 해결을 하고 있지만, 근본적으로 어디가 잘못 된 것 같은데... 어떻게 해야 합니까?
제발 도와주십시오.
이렇게 직접 바이트수를 지정해 보시죠...
hugehead wrote:
> 우리팀은 ADO와 MIDAS를 사용해서 3tier로 프로그램을 개발 중입니다.
> 근데 이상한 현상을 발견해서 조언 부탁드립니다.
>
> 우선 서버 프로그램에
> 1) ADOConnection1을 갖다 놓고, connection은 SQL OLE DB 방식으로 연결하고,
> 2) ADOQuery1.SQL에
> 'SELECT CUST_NO, NAME FROM CUST_MASTER WHERE NAME LIKE :pSearch'라고 입력하고, parameter는 ptInput, ftString으로 정의합니다.
> 3) DataSetProvider1를 연결한 후,
>
> 클라이언트 프로그램에는
> 1) SocketConnection1을 연결하고,
> 2) ClientDataSet1에 DataSetProvider1을 연결합니다.
> 3) ClientDataSet1에 pSearch라는 Parameter를 만든 후 pdInput, ftString으로 정의한다음,
> 4) ('%' + Edit1.Text '%')를 pSearch Parameter로 넘기게 합니다.
>
> CUST_MASTER:
> ---------------------
> CUST_NO NAME
> ---------------------
> 1 콩쥐
> 2 강남콩
> 3 완두콩
> 4 메콩강
> 5 홍콩여자
> 6 땅콩강정
>
> 클라이언트를 실행시킨 후
> 1)검색어를 '콩'으로 입력하고 실행시키면:
> 결과:
> 강남콩
> 완두콩
> 2)검색어를 '남콩'으로 입력시키고 실행시키면:
> 결과:
>
> 3)검색어를 '남콩뿅'으로 입력시키고 실행시키면:
> 결과:
> 강남콩
>
> 참 미칠 노릇이지요?
> 패턴을 잘 보면,
> 1)의 예에서는 '%콩%'가 서버로 가는데, 이는 바이트 수로 4바이트입니다.
> 그러나 결과 값은 마치 '%콩' 만 넘어간 것 갖지요. 즉 3바이트만 갔습니다.
> 3)의 예에서는 결과는 원래 NULL이어야 하는데 '강남콩'이 나오지요.
> 그 뜻은, '%남콩뿅%', 즉 8바이트 대신 '%남콩' 이 넘어간 것입니다. 즉 5바이트만 갔습니다.
>
> 흠냐... 한글 캐릭터는 2바이트라는 것을 모르나봐요... 그래서 '%콩%'는 3글자이지만 4바이트인데도 3바이트만 가고,
> '%남콩뿅%'은 5글자이지만 8바이트인데도 불구하고 5바이트만 갑니다.
>
> 지금은 어거지로 모자라는 만큼 뒤에다 빈칸을 채워 너서 해결을 하고 있지만, 근본적으로 어디가 잘못 된 것 같은데... 어떻게 해야 합니까?
>
> 제발 도와주십시오.