Q&A

  • Access 쿼리에선 Replace 되는데, 델파이에선 안되요.
도와주십시오~ 이것만 해결하면 컨버젼 프로젝트 완전 끝나는데,

도대체 왜 안 되는지 모르겠네요.
<!--CodeS-->
SELECT REPLACE(LOG,'$','')
FROM TB_RMST
<!--CodeE-->
이런식으로, Access 에서 쿼리창에서 날리면, 원하는 대로

$ 문자는 없애고 나오거든요..

근데, 델파이에서 ADOQuery 컴포넌트 쓰는데.. 여튼
<!--CodeS-->
    ADOQuery1.SQL.Add('SELECT REPLACE(LOG,'$','') from ');
    ADOQuery1.SQL.Add('TB_RMST');
<!--CodeE-->
그리고, 쿼리 오픈하면 '식의 REPLACE 함수가 정의 되지 않았습니다' 하고 오류가 납니다.

왜 정의가 안 된건지 좀 갈켜주세요..

어떻게 하면, 저 REPLACE 함수를 잘 써먹을 수 있을까요? 꼭 써야 되는데..


고수님들의 빠른 답변 기다리겠습니다.
4  COMMENTS
  • Profile
    박홍재 2007.04.08 15:46
    ADOQuery1.SQL.Add('SELECT REPLACE(LOG,'''+'$'+''','''+''+''') from ');
    ADOQuery1.SQL.Add('TB_RMST');

    위와 같이 바꿔서 해보세요. 그럼.
  • Profile
    한상욱 2007.04.09 20:13
    오류가 그 오류가 아닌데요..

    파라미터가 잘 못 된거면,

    '인수가 맞지 않습니다.' 나

    '형식이 맞지 않습니다.' 같은 오류 메시지가 나오겠지요..

    제가 맞딱뜨리 오류는

    '식의 REPLACE 함수가 정의 되지 않았습니다'  입니다..

    Replace 함수 자체를 Microsoft jet 이 인식을 하지 못하는 경우인 거라 생각하는데..

    해결이 안 된다는 거지요..


  • Profile
    박홍재 2007.04.13 02:46
    아 지송....
    일단 Jet Engine에서는 일부 Function이 동작을 하지 않는데 그중 하나가 Replace 라고 하네요.
    예전에 Access2000 까지는 동작을 했던거 같으나 2003부터는 동작을 하지 않는다고 하네요...
    아마도 델파이에서 루틴을 만들어서 하시는 수 밖에 없을 거 같네요. While을 돌려서 처음부터 끝까지 검색해서 Update 까지 하면...음 부하가 좀 걸릴거 같군요. 그럼.

    http://aspalliance.com/groups/microsoft_public_dotnet_languages_vb_data/ng-946255_Replace_in_access_queries.aspx

    위 링크는 ASP 및 VB6 사용자들도 이런 문제를 여러명이 질문을 했네요. 참고하세요. ^^
  • Profile
    김완구 2007.05.03 01:06
    델마당에는 처음 오는군요..

    혹시나 앞으로 이런 문제가 생기는 분이 계실까해서 답변올립니다.

    이거 답변할려고 가입도 했네요 .

    저같은 경우는 모든 레코드를 INSERT 하다보니깐 dbf를 사용하는데.

    5만건에 2시간정도 걸리네요.. 무슨문제인지 ㅡ_ㅡ ;;; 디비는 초보나 다름없다보니,,,

    replace가 지원이 안되서 저런 짓을했는데 너무 어처구니 없어서,

    되는 방법을 고민했습니다.

    REPLACE 해서 INSERT INTO SELECT 구문을 사용하려 했더니 REPLACE를 지원 안한다는군요.

    위에 답변주신글들 읽어보고 해도 답이 없길레 혹시나 다른 함수도 지원하는지 봤더니,

    기본함수는 지원하네요 다행입니다. ..

    서론이 길었네요..

    ----


    방법은 REPLACE 로직을 만들어 주는겁니다. 저같은경우는 로직이 간단해서 다행이지만

    코드는 vb 입니다. 델파이 전문가분들은 알아서 더 잘하시겠지요 히히

    SELECT  '" & DevName & "' + right$(name, len(name) - instr(name, '_') )

    원래 구문은 SELECT REPLACE(NAME, 'FINDSTRING', 'REPLACESTRING')

    이던부분을 INSTR 과, LEN , RIGHT$ 함수를 사용해서 구현했더니 잘되네요.

    2만5천건 3초 걸립니다.. DBF 만쉐~

    도움이 되셨길 ^_^;;;



    >아 지송....
    >일단 Jet Engine에서는 일부 Function이 동작을 하지 않는데 그중 하나가 Replace 라고 하네요.
    >예전에 Access2000 까지는 동작을 했던거 같으나 2003부터는 동작을 하지 않는다고 하네요...
    >아마도 델파이에서 루틴을 만들어서 하시는 수 밖에 없을 거 같네요. While을 돌려서 처음부터 끝까지 검색해서 Update 까지 하면...음 부하가 좀 걸릴거 같군요. 그럼.
    >
    >http://aspalliance.com/groups/microsoft_public_dotnet_languages_vb_data/ng-946255_Replace_in_access_queries.aspx
    >
    >위 링크는 ASP 및 VB6 사용자들도 이런 문제를 여러명이 질문을 했네요. 참고하세요. ^^
    >>오류가 그 오류가 아닌데요..
    >>
    >>파라미터가 잘 못 된거면,
    >>
    >>'인수가 맞지 않습니다.' 나
    >>
    >>'형식이 맞지 않습니다.' 같은 오류 메시지가 나오겠지요..
    >>
    >>제가 맞딱뜨리 오류는
    >>
    >>'식의 REPLACE 함수가 정의 되지 않았습니다'  입니다..
    >>
    >>Replace 함수 자체를 Microsoft jet 이 인식을 하지 못하는 경우인 거라 생각하는데..
    >>
    >>해결이 안 된다는 거지요..
    >>
    >>
    >>>ADOQuery1.SQL.Add('SELECT REPLACE(LOG,'''+'$'+''','''+''+''') from ');
    >>> ADOQuery1.SQL.Add('TB_RMST');
    >>>
    >>>위와 같이 바꿔서 해보세요. 그럼.
    >>>>도와주십시오~ 이것만 해결하면 컨버젼 프로젝트 완전 끝나는데,
    >>>>
    >>>>도대체 왜 안 되는지 모르겠네요.
    >>>>
    >>>>SELECT REPLACE(LOG,'$','')
    >>>>FROM TB_RMST
    >>>>
    >>>>이런식으로, Access 에서 쿼리창에서 날리면, 원하는 대로
    >>>>
    >>>>$ 문자는 없애고 나오거든요..
    >>>>
    >>>>근데, 델파이에서 ADOQuery 컴포넌트 쓰는데.. 여튼
    >>>>
    >>>>    ADOQuery1.SQL.Add('SELECT REPLACE(LOG,'$','') from ');
    >>>>    ADOQuery1.SQL.Add('TB_RMST');
    >>>>
    >>>>그리고, 쿼리 오픈하면 '식의 REPLACE 함수가 정의 되지 않았습니다' 하고 오류가 납니다.
    >>>>
    >>>>왜 정의가 안 된건지 좀 갈켜주세요..
    >>>>
    >>>>어떻게 하면, 저 REPLACE 함수를 잘 써먹을 수 있을까요? 꼭 써야 되는데..
    >>>>
    >>>>
    >>>>고수님들의 빠른 답변 기다리겠습니다.
    >>>
    >>
    >