첫번째 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번 문법으로
처리를 해줘야하기 때문입니다.
도움 부탁드립니다.
요즘 디비라고는 안해서 통~~~~ ㅎㅎ
손놓은지 수년이네요. 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문에서도 저거 전체를 하나로 보는거죠. ㅠㅠ
그럼....