Q&A

  • 동적 SQL처리에 관해서 도움 요청합니다.
첫번째 SQL문
SELECT  *
FROM    EXAM
WHERE   GUBUN IN (:XGUBUN)

ParamByName('XGUBUN').AsString := '''A'',''B''';

두번째 SQL문
SELECT  *
FROM    EXAM
WHERE   GUBUN IN (:XGUBUN,:XGUBUN1)

ParamByName('XGUBUN').AsString := 'A';
ParamByName('XGUBUN').AsString := 'B';


처음 SQL문을 이용해서 값을 얻어오고자 했는데 결과 값을 가져오지 못하더군요.
그래서 두번째처럼 변수를 두개 만들어 주고 처리를 해 줬더니 값이 나왔습니다.
문제는 지금 처음 방법을 이용해서 여러 값을 입력 받아서 처리할 수 있는 방법을 알고 싶습니다.
지금 예제로 올린 두번째 문법처럼 값의 개수가 정해진게 아니라 수시로 변하기 때문에 1번 문법으로
처리를 해줘야하기 때문입니다.
도움 부탁드립니다.
4  COMMENTS
  • Profile
    하얀까마귀 2004.10.22 04:07
    안녕하세요 하얀까마귀 입니다..
    요즘 디비라고는 안해서 통~~~~ ㅎㅎ
    손놓은지 수년이네요. 3-4년 되는것 같네요.. 해보지도 않아서 맞는지
    모르겠지만...

    일단 님이 하신방법은 불가능 안됩니다. ^^
    2번은 물론(파람값 오타죠?) 가능하죠 두개의 변수니까. ㅎㅎ

    문제는 델파이에 있습니다.
    님이 원하시는건 저 SQL문이

    Gubun in ( 'A', 'B' )  <-- 요렇게 만들어지는걸 원하시는걸로 보입니다.

    물론 ParamByName <-- 이걸 쓰지 않고 그냥

    temp := '''A'',''B''';
    sSQL :=  'select * from exam ' +
              ' WHERE Gubun in( ' + temp + ')' ;

    이렇게 하시면 당연히 됩니다.. ^^ 이렇게 하시면 님이 원하시는데도 되겠죠

    그런데 꼭 ParamByName 을 써야겠다면 위의 방법으로는 안됩니다.
    두개의 값을 줄수 없어요. 이유는
    스트링 값을 델파이가 인위적으로 바꾸기 때문입니다.

    예를들어서요..  에디트의 값이 abcd'efg  라고 해서  ' <--  싱글퀘스천 마크가 들어가있다면 sql문에서 에러가 발생됩니다. 그런데  ParamByName이걸
    쓰면 에러안나죠. 이유는 내부적으로 싱글을 두개로 만들어 버리기 때문입니다.
    그럼 A, B 이렇게 쓰면 이것도 마찬가지죠
    이것도 내부적으로는 gubun in ( 'a,b' ) 이렇게 되겠네요..
    그렇다고 위의것처럼 넣어주어도 마찬가지죠?

    SQL문의 문자와 숫자값을 구분하는 ' <-- 이놈을 ParamByName 이 놈이 변환시킨다고 보시면되요.
    너무 기네요. ㅎㅎ
    어쨌든 제가 아는한 안될꺼로 생각되네요..

    님이 입력하신 값은 실제로는
    gubun in ( '''A'',''B''' ) <-- 이렇게 들어갈것으로 보입니다.
    따라서 SQL문에서도 저거 전체를 하나로 보는거죠. ㅠㅠ
    그럼....





  • Profile
    석주현 2004.10.21 18:22
    전 델파이에선 그런 경우가 없었는데

    씨 빌더에서 하다 보니 저번에 ParamBy 를 이용해서

    파라메터 넣는게 안돼는 경우가 있더군요..

    아예 그냥 SQL 문장을 만들어서 넣어 보세요..

    그렇게 해서 된다면 -_-;;

    아마도 파라메터가 안 먹는 경우 입니다..

    왜 그런지는 저도 모르는데

    그래서 그 다음 부터는 전 ParamBy 안씁니다.. ㅜ_ㅜ

    그럼 이만
  • Profile
    최성준 2004.10.21 00:07


    1. 변수에 담아서 해보세요 예) temp := '''A'',''B''';
  • Profile
    이근석 2004.10.21 00:18
    변수에 대입 방법을 써 보았지만 안돼는군요. (ㅜ.ㅜ)
    • 김진태
    • 2004.10.22 08:44
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김진태
      2004.10.23 02:43
    • 이영주
      2004.10.22 22:04
      재미 있을것 같아 만들어 보았습니다. 좀 거친듯한 느낌은 드는군요. 메모장의 메뉴를 참고하였습니다. ...
    • 권오현
      2004.12.23 01:55
      안녕하세요. 저도 님과 같은 궁금증 있어 아래와 같이 해보니 그런대로 원하는 동작이 되더라구요. ...
    • 김민우
    • 2004.10.22 06:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 권태훈
      2004.10.22 22:54
      var   a1,a2 : String;   answer : Integer;   r1 : String; begin ...
    • Maru
      2004.10.22 06:32
      저는 이거 하루종일 고민하여.(글올리고 답글달기까지 고민함 -_-), 누군가 레지스트리를 건드려서 가...
    • 박준영
      2004.10.23 20:52
      혼자서 별짓 다해보다가 눈가리고 아웅인지는 모르지만 해결을 했습니다. 제가 Text 필드를 UpDate 쿼리...
    • 일그니
      2004.10.21 20:27
      Copy, POS, Length 이 세개의 함수를 이용하시면 무난 하실것 같습니다.
    • 최수림
    • 2004.10.21 19:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정동욱
      2004.10.21 21:05
      [...] 1.어느쪽이 클라이언트 역할을 하느냐?. 2.최소한 초단위 보다 더빨리 모니터링 해야 한다,...
    • 송득보
    • 2004.10.21 18:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김일득
      2004.11.16 00:43
      Thread에서 TQuery 등의 VCL콤포넌트를 사용하기위해서는 TDataBase코포넌트와 VCL 콤포넌트를 1:1...
    • 정동욱
      2004.10.21 19:12
      [...] http://www.overbyte.be  에 가면 francois piette 라는 사람이 만든 MidWare ...
    • 강신구
    • 2004.10.21 18:20
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.10.21 18:44
      값을 확인 할 수 가 없어서 잘은 모르겠지만 아래와 같이 하면 됩니다. ==============================...
    • 강신구
      2004.10.21 19:43
      답변에 감사드립니다.. 답변주신 내용에서 한가지 빠진 부분이 있어서 추가 질문을 드립니다.. C함수...
    • 석주현
      2004.10.21 20:34
      흐흐 그걸 빼 놓았네요.. 아래에 추가 했습니다... 간단하게 포인터 증가는 inc(포인터명) 이걸 씁니다...
    • 강신구
      2004.10.21 21:48
      감사합니다.. 해결되었습니다.. 많은 도움이 되었습니다..
    • 하얀까마귀
      2004.10.21 18:26
      전체 필드나 전체 레코드가 바뀐건 님께서 루틴을 잘못만드신걸로 보이네요.. 밑에 있는 루틴은 참고 하...
    • 석주현
      2004.10.21 18:12
      다른 분이 해주신거에서 조금만 고치면 되는건데 -_-;; 아래 고친 거 입니다. 잘만 확인 하시면 바로 활...
    • 박원용
      2004.10.21 20:43
      아~~ 이제 정말 잘되네요... 갑자기 프로그램을 만들다보니.. 모르는것이 너무 많아서. 헤헤.. 답변...
    • 깜찌기
    • 2004.10.21 09:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.10.21 18:19
      Direct Input 을 이용하시면 간단하게 해결됩니다. 음 예전에 올라와 있던 DelphiX 같은 VCL 팩키지를 ...
    • 기타맨
    • 2004.10.21 02:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.21 18:37
      다른 문제겠죠? 해당 폼 내의 다른 루틴상의 문제라고 생각되어 지네요. ㅠㅠ 채팅폼의 루틴을 하나하...
    • 황영신
    • 2004.10.21 01:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 우용우
    • 2004.10.21 00:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정동욱
      2004.10.21 01:43
      [...] 한마디로 엄청난 벌레를 만들었네요. SendBuf(Sendjpg,sizeof(Sendjpg)); 이 문장은 말...
    • 우용우
      2004.10.21 02:49
      답변 감사드립니다. 아직 기량이 부족해서 Sizeof 에 에러가있을줄 꿈에도몰랐습니다..ㅜ.ㅜ 헌데 님이 ...
    • 이근석
    • 2004.10.20 23:40
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.22 04:07
      안녕하세요 하얀까마귀 입니다.. 요즘 디비라고는 안해서 통~~~~ ㅎㅎ 손놓은지 수년이네요. 3-4년 되는...
    • 석주현
      2004.10.21 18:22
      전 델파이에선 그런 경우가 없었는데 씨 빌더에서 하다 보니 저번에 ParamBy 를 이용해서 파라메터 ...
    • 최성준
      2004.10.21 00:07
      1. 변수에 담아서 해보세요 예) temp := '''A'',''B''';
    • 이근석
      2004.10.21 00:18
      변수에 대입 방법을 써 보았지만 안돼는군요. (ㅜ.ㅜ)
    • 정동욱
      2004.10.21 02:08
      [...]   FormatDateTime( 'hh:nn:ss' ,  IncMinute( Now , 1 ) );  &n...
    • 석주현
      2004.10.21 01:08
      procedure TForm1.Button1Click(Sender: TObject); var   StartTime, EndTime, AddTime : TDat...
    • 석주현
      2004.10.21 00:39
      StartTime, AddTime,EndTime : TDateTime 로 선언 하시고 EncodeTime 으로 각각 인코드 해서 넣어 ...
    • 김정현
    • 2004.10.20 22:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.10.21 01:29
      안녕하세요. 최용일입니다. 소스가 없으면 불가능합니다. 델파이는 이진호환이 안됩니다. dcu, b...
    • 김정현
      2004.10.21 01:47
      에고...그럼 혼자 쇼를 했네요 ^^ 답변 정말 감사합니다. 다시 공부하고 오겠습니다. 최용일님 하루...
    • 최용일
      2004.10.20 21:48
      안녕하세요. 최용일입니다. OnKeyDown에서 하세요... if Key = VK_RETURN then    &...
    • 고진중
      2004.10.20 23:08
      답변 감사합니다.. 그런데 답변하신 내용은 질문전에 해봤던건데 안되요 ㅜㅜ
    • 최용일
      2004.10.21 01:21
      안녕하세요. 최용일입니다. 어떤것을 원하는지 잘 모르겠네요... 아래 코드는 일반적인 컨트롤이나 ...