Q&A

  • 델초보 문자관련 질문드립니다 ㅠㅠ;;
안녕하세요~ ^^ 오늘도 날씨가 꾸리꾸리 하내용 ^^
소주를 생각나게하는 날씨지만.. 일땜시 ㅠㅠ;;

제가 질문드리고싶은건요.. 밑에 소스처럼 쿼리문을 하나 작성했습니다
Sid 의 값은 '243','456' <<요렇게 연결된 문자입니다.

이 쿼리를 돌리면.. 에러가 나는데요.. 에러내용은..
Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation

이런에러가 나는데요.. 혹시 Sid 들어가있는 연결된 문자때문인지요..
도저히 모르겠습니다 ㅠㅠ;; 어제부터 여기저기 찾아보는데 답이 안나오내요.. ㅠㅠ

이런문제를 아시는 고수님계시면 관심 부탁드립니다 ㅠㅠ;;

                  with DM.ibcqrCheck do
                    begin
                      Active := False;
                      SQL.Clear;
                      SQL.Add('SELECT COUNT(A.ID) AS CNT ');
                      SQL.Add('  FROM TEST A                        ');
                      SQL.Add(' WHERE A.ID  IN (:AID)          ');
                      ParamByName('AID').AsString := Trim(Sid);
                      Active := True;
                    end;

그럼 오늘도 즐겁고 행복한하루 보내시구요~ 이따가 점심 맛나게 드시구요~
감기조심하셔용~ *^^*
1  COMMENTS
  • Profile
    소울해커 2009.03.06 05:26
    IN을 쓸때 A IN ('243', '456'...) 요런식으로 사용을 합니다만 고걸 변수로 넣고 집어넣으시면 안됩니다.

    변수로 넣으시겠다면

    with DM.ibcqrCheck do
    begin
    Sid1 := '243';
    Sid2 := '456';
    Active := False;
    SQL.Clear;
    SQL.Add('SELECT COUNT(A.ID) AS CNT ');
    SQL.Add(' FROM TEST A ');
    SQL.Add(' WHERE A.ID IN (:AID1, :AID2) ');
    ParamByName('AID1').AsString := Trim(Sid1);
    ParamByName('AID2').AsString := Trim(Sid2);
    Active := True;
    end;

    이런식으로 쓰셔야 합니다.
    (오라클이랑 MS-SQL은 다를 수도...ㅎ;)

    Sid에 몇개의 인자가 들어갈지 알 수 없다면 StringList로 만들어서 입력하시면 좀 편하실 겁니다.

    with DM.ibcqrCheck do
    begin
    SidList.Add('243');
    SidList.Add('456');
    Active := False;
    SQL.Clear;
    SQL.Add('SELECT COUNT(A.ID) AS CNT ');
    SQL.Add(' FROM TEST A ');
    SQL.Add(' WHERE A.ID IN (''' + StringReplace(SidList.CommaText, ',', ''',''', [rfReplaceAll]) + ''')');
    Active := True;
    end;

    대충 이런 형태로...