Q&A

  • 하루종일 봐도 해결 못해서...
소스는 다음과 같습니다.


   :
   :
   :
//정의

    IDX_REC_DEF = RECORD
                S : STRING;
                F : INTEGER;
    END;

    IDX_TBL_DEF = RECORD
                N: INTEGER;
                R: ARRAY[0..20] OF IDX_REC_DEF;
    END;

    S_TBL: IDX_TBL_DEF;
   :
   :
   :
//formcreate의 내용.  참고로 ParamStr(5)는 공백입니다.
PARAM5 := ParamStr(5);

   :
   :
   :

//formshow의 내용

   :
   :
   :
    n:=0;

    while not Eof do
    begin

      if (FieldByName('서비스종류code').AsInteger > 31) then Break ;

      CB1.Items.Add(FieldByName('서비스종류명').AsString);
      DCB1.Items.Add(FieldByName('서비스종류code').AsString);

      S_TBL.R[n].S  :=  FieldByName('서비스종류code').AsString;
      S_TBL.R[n].F  :=  n;
      n := n + 1;
      Next;
    end;

  end;

   :
   :
   :

위와 같이 소스가 되어 있는데요,
formshow의 while문을 거치고 나면 param5가 공백이 아니라, 마지막
서비스종류code의 값이 들어가 있다는 겁니다.
물론 while문을 바로 앞까지는 공백을 유지합니다.
당연히 formcreate에서 초기화 했으니까여..
결단코 다른곳에서 param5변수에 값을 넣는 곳은 없습니다.
미치겠습니다.
도움될만한 말씀들 부탁드립니다.

2  COMMENTS
  • Profile
    김경록 2003.08.03 04:32
    Next를 확인해 보십시오..
    With문에 들어 있는 Next는
    Form의 Next인지
    다른 ActiveControl의 Next인지,
    아니면, With문에 종속된 Next인지
    애매한 경우일 수 있습니다..
    흔히들 이것을 Bug라고 하져..
    물론, 아시겠지만..




  • Profile
    김수경 2003.07.31 20:14
    특별히 이상한 곳은 없어 보입니다.

    다만, 검색한 Record의 갯수가 21개(IDX_TBL_DEF.R의 갯수)를 초과하는

    경우 문제갈 발생 될 수 있어 보이니

    n의 갯수가 21이 넘으면 while 문을 탈출하도록 조건문을 추가

    하시기 바랍니다.

    즐프하세요. ^^;



        if n > 21 then break;