Q&A

  • <도와주세요>*SQL문에서 where절을 사용한 조회시 에러*
감사합니다.



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'.



그럼 수고 하시구, 오늘도 건강하구 좋은 하루 되세요.

3  COMMENTS
  • Profile
    종이학 2000.03.08 18:27
    김상현 wrote:

    > 감사합니다.

    >

    > 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값이나 기타 다른 값이 들어오는지

    확인하는것이 좋은 듯 싶거든요



    행복한 하루되세요..





  • Profile
    임효경 2000.03.08 02:19
    김상현 wrote:

    > 감사합니다.

    >

    > 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'.

    >

    > 그럼 수고 하시구, 오늘도 건강하구 좋은 하루 되세요.





    언뜻봐서는..

    Where절에서 문장이 끝나는 표시를 하지 않아서 그런 것 같네요.



    aqSoft.SQL.Add('where part = ' + IntToStr(cboPart.ItemIndex));



    ↓ ↓



    aqSoft.SQL.Add('where part = ' + IntToStr(cboPart.ItemIndex) + '');





  • Profile
    하얀까마귀 2000.03.06 18:22
    안녕하세요 하얀까마귀 입니다.



    음.. 김상현 님은 DataBase에 관해서 아니 SQL 문법에 관한 책같은거 조금 보셔야 겠네요... DataBase프로그램 개발할려면 그게 무척 중요하거든요.....



    SQL.에서 결과가 있든지 없든지 그건 상관없이 where절을 사용할 수 있습니다.

    해당하는 값이 없으면 결과또한 없겠죠.. 단지 그 차이 뿐입니다.

    그런데... 왜 에러가 나냐구요.???

    에러가 EConvertError 잖아요.. 이건 SQL이 아닌

    IntToStr(cboPart.ItemIndex); <-- 여기 에서 발행하는 겁니다.

    타입변환이 안된다는 거거든요??? 음.... 좀 이상한데..

    cboPart가 combobox아닌가요??? 그렇다면 -1이라도 들어있을텐데..

    이값을 한번 검사해 보세요...

    정확한건 소스를 봐야 알겠지만.. 지금 보여주신 걸로는 이부분밖에는 없을것

    같네요..



    그럼 즐거운 시간 되세요..

    - 하얀까마귀 -