감사합니다.
ADOQuery를 사용해서 DB를 연결후 SQL프로퍼티에 SQL문을 입력하구 Active를 하니깐 에러가 났습니다.
거의 확실한 이유는 where절을 사용했는데, 해당하는 데이터가 아무것도 없어서입니다.
(왜냐면 데이터 집어 넣으니까 잘되거든요.)
그런데 Select문만 사용했을 경우에는 그런 에러가 나지 않았었는데,
왜 where절을 사용하니까는 에러가 나는 것일까요? 원래 그런건가요?
가장 중요한 질문은 데이터가 없을 때 해결할 수 있는 조회방법은 뭐가 있나요?
또 한가지 이 에러문장에 try~except문을 사용해서 예외처리를 했는데도 안 먹더군요.
제가 설정을 잘못해서 안되는 걸까요? 아니면 원래 지원이 안되서 일까요?
제가 에러를 낸 예를 보여 드리겠습니다.
agSoft.Sql.Active = False;
aqSoft.SQL.Clear;
aqSoft.SQL.Add('select * from prog');
if cboPart.ItemIndex <> 0 then
aqSoft.SQL.Add('where part = ' + IntToStr(cboPart.ItemIndex));
try
aqSoft.Active := True;
except
end;
에러 종류는 이거에요.
EConvertError with message '''is not a valid integer value'.
그럼 수고 하시구, 오늘도 건강하구 좋은 하루 되세요.
> 감사합니다.
>
> ADOQuery를 사용해서 DB를 연결후 SQL프로퍼티에 SQL문을 입력하구 Active를 하니깐 에러가 났습니다.
>
> 거의 확실한 이유는 where절을 사용했는데, 해당하는 데이터가 아무것도 없어서입니다.
> (왜냐면 데이터 집어 넣으니까 잘되거든요.)
>
> 그런데 Select문만 사용했을 경우에는 그런 에러가 나지 않았었는데,
>
> 왜 where절을 사용하니까는 에러가 나는 것일까요? 원래 그런건가요?
>
> 가장 중요한 질문은 데이터가 없을 때 해결할 수 있는 조회방법은 뭐가 있나요?
>
> 또 한가지 이 에러문장에 try~except문을 사용해서 예외처리를 했는데도 안 먹더군요.
>
> 제가 설정을 잘못해서 안되는 걸까요? 아니면 원래 지원이 안되서 일까요?
>
> 제가 에러를 낸 예를 보여 드리겠습니다.
>
> agSoft.Sql.Active = False;
> aqSoft.SQL.Clear;
> aqSoft.SQL.Add('select * from prog');
>
> if cboPart.ItemIndex <> 0 then
> aqSoft.SQL.Add('where part = ' + IntToStr(cboPart.ItemIndex));
>
> try
> aqSoft.Active := True;
> except
> end;
>
>
> 에러 종류는 이거에요.
> EConvertError with message '''is not a valid integer value'.
>
> 그럼 수고 하시구, 오늘도 건강하구 좋은 하루 되세요.
종이학 write:
위에 문장에서 part의 타입이 문자 타입이라면
aqSoft.SQL.Add('where part = ' + IntToStr(cboPart.ItemIndex));
==> aqSoft.SQL.Add('where part = ''' + IntToStr(cboPart.ItemIndex) + '''');
이렇게 고쳐주어야 만 제대로 된 SQL문장이 만들어 지거든요..
최종 SQL문장은 이렇게 되겠죠..
select *
from prog
where part = '1' ; //이렇게 구성되려면 문자열을 감싸는 따옴표(')를 넣어주어야 되구요..
그래도 안된다면 우선 위에 쿼리 문제는 아니구요..
읽어온 데이터 중에 혹시 integer타입컬럼에 null값이나 기타 다른 값이 들어오는지
확인하는것이 좋은 듯 싶거든요
행복한 하루되세요..