Q&A

  • 정말이상하넹...
오라클 디비를 쓰는데염...
q_save에서 sql값을 직접..

select * from enpr_basic where enprnum='123-45-67890'

이렇게 넣고.. active를 true  해주면 123-45-67890 인것만 잘열리는데..

q_save.sql.add('select * from enpr_basic where enprnum=:chk');
q_save.ParamByName('chk').AsString :='123-45-67890';

이렇게 열면 eof도 나오지 않고..
그렇다고 자료가 나오는 것두 아니고...
참 이상합니다 왜 그런지 아시는분 계시면 리필 달아 주세요..


enprnum필든 char(15)형입니다.
3  COMMENTS
  • Profile
    박상현 2002.03.24 03:33
    쩝 저도 한동안 그문제로 고민했었는데...
    Oracle8i 를 ODBC를 연결해서 사용하면 ParamByName 함수가 되는데, SQL Linker를 이용해서 연결해서 사용하면, 파라메타를 그냥 씹어버리더군요. SQL Monitor를 이용해서도 확인해봤습니다만, 파라메타를 Link해주지를 않더군요. 그래서 하는 수 없이, SELECT 문장 자체에 값을 넣어서 쿼리합니다.

    요렇게...

    sValue := '123-45-67890';
    with qry do begin
        Close;
        SQL.Clear;
        SQL.Add('select * from enpr_basic');
        SQL.Add('where enprnum='''+sValue+''' ');
        Open;
    end;

    짜증나지만, 할수없더군요. 어디가도 답이 없어서리...
    SQL Monitor로 확인해보세요. 델파이가 값을 씹어버립니다.
    도움이 되었길 바랍니다.
  • Profile
    김경록 2002.03.13 01:33
    음... 이거 맞는지 잘모르겠는데여..
    char문제가 아닌가 싶은데..
    varchar와 char와는 차이가 있다는거 아시죠?
    varchar는 100바이트를 할당해도 입력한 값외 비교되지 않지만,
    char같은 것은 좀 다르져..
    무조건 할당한 15바이트를 비교한다는 것이져..
    그러니, 이부분을
       select * from enpr_basic where enprnum=:chk

    이렇게 바꾸면 어떨까여?

       select * from enpr_basic where rtrim(enprnum)=:chk

    맞는진 잘몰르겠지만. 이게 아닌가 싶네여..



  • Profile
    초보지롱 2002.03.12 02:18

    ParamByName은 버그가 좀 있죠. 그리구 디버깅도 안대공...
    저는 절대 ParamByName 안쓰거던여
    q_save.sql.add('select * from enpr_basic where enprnum=''123-45-67890'');
    이렇게 해보셈... ^^;