Q&A

  • combobox itam 선택하기 (소스좀 봐주세용)
db에 미리 저장되어있는 필드 내용을 combobox = combo1에 넣은 내용과

코드상에서 add 하드 코딩한 내용 이 인덱스를 호출하면  표현이 안되는 쪽과 되는 쪽으로 나뉘는데
이유를 모르겟습니다

combo1.index := 1; <<< 이러면 화면에 해당 인덱스의 박스 내용이 나와야 되는뎅
두가지 경우가 다르게 동작합니다


1) db 에서 select 한경우 index를 호출하여도 동작이 안됨  
procedure Tfrm_Ureceipt.combo1_set;
var str:string;
    mstr:string;
    i:integer;
begin
  combo1.Clear;
  with ADOQuery1 do
  begin
    sql.Clear ;
    str:='select * from tc_code where ds_code=''aa'' and no_code <> ''00'' order by 2';
    sql.Add(str);
    open;
  end;
  for i:=1 to ADOQuery1.RecordCount do
     begin
         mstr:= ADOQuery1.fieldbyname('no_code').asString
                    + ' : ' + ADOQuery1.fieldbyname('nm_code').asString;
         Combo1.Items.add(mstr);
         ADOQuery1.Next;
     END;
     combo1.ItemIndex := 1 ;     < <  여기서 index 호출    X 안됨
end;



2)하드코딩한 combobox의 호출의 경우(잘됨)

procedure Tfrm_selgln.combo1_set;
var mstr:string;
    i:integer;
begin
  combo1.Clear;
  for i:=1 to 5 do
     begin
      case i of
         1:
           mstr :='00 : 전       체    조    회'  ;
         2:
           mstr :='01 : 번       호    조    회'  ;
         3:
           mstr :='02 : 코       드    조    회'  ;
         4:
           mstr :='03 : 명       칭    조    회'  ;
         5:
           mstr :='04 : 전 화 번 호    조    회'  ;

     end;
     combo1.Items.Add(mstr);
     combo1.ItemIndex := + 1;
     END;
  combo1.ItemIndex := 0;    << index호출 하면 아주 잘됨    O잘됨
end;


내공이 무한하신 고수님의 조언 부탁드립니다.



3  COMMENTS
  • Profile
    석주현 2008.06.04 22:54
    디버깅 하시면서 쿼리의 결과가 제대로 나오는지 확인 부터 해보세요.

    디비 구성이 어떤지 모르지만 일단 코드는 별 문제 없는 것 같습니다.
  • Profile
    이정욱 2008.06.04 22:57
    저도 가끔 이런경우를 보는데, 아마도 for 문의 최적화 때문일 수도 있습니다.

    디버깅을 해보시면, combo1.ItemIndex := 1 ; 이부분이 먼저 호출 되고 루프가 나중에 도는 현상이 있을 수도 있습니다.

    for i:=1 to ADOQuery1.RecordCount do
    begin
    mstr:= ADOQuery1.fieldbyname('no_code').asString
    + ' : ' + ADOQuery1.fieldbyname('nm_code').asString;
    Combo1.Items.add(mstr);
    ADOQuery1.Next;
    END;

    이 부분을


    while not ADOQuery1.EOF do
    begin
    mstr:= ADOQuery1.fieldbyname('no_code').asString
    + ' : ' + ADOQuery1.fieldbyname('nm_code').asString;
    Combo1.Items.add(mstr);
    ADOQuery1.Next;
    end;


    이렇게 바꿔보세요.

  • Profile
    석주현 2008.06.04 23:20
    아 그러고 보니 정욱님 말씀 처럼 최적화에 따라 달라지는 경우가 있습니다.

    음 저 같으면요.


    var
    tmpStr : TStringList;
    begin
    tmpStr := TStringList.Create;

    for i:=1 to ADOQuery1.RecordCount do
    begin
    mstr:= ADOQuery1.fieldbyname('no_code').asString
    + ' : ' + ADOQuery1.fieldbyname('nm_code').asString;
    tmpstr.add(mstr);
    ADOQuery1.Next;
    end;

    tmpStr.Sort;
    Combo1.Items = tmpStr;

    tmpStr.Free;
    end;


    아마 이렇게 하면 최적화 문제도 상관 없을 듯 하고요.
    디비에서 그냥 값을 순서에 상관없이 넣어도 TStringList에서 소트 해주니 더 나을 듯 합니다만 ^^

    한번 해보십시요.. ^^
    • steps
    • 2008.06.14 02:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.15 02:26
      자답입니다. 코드에서 이미지처리에 리용된 GDI PLUS가 문제였습니다. GDI Plus를 쓴 경우 우의 증상...
    • 화이팅
    • 2008.06.14 00:54
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 깔쌈보이
      2008.06.14 02:51
      with mainf do begin 문장에 보면 name := 어쩌구 구문 있죠? 이 구문에 한글이 들어가서 발생한 오류입...
    • 화이팅
      2008.06.14 03:44
      이름을 바꾸니 위와같은 에러는 발생하지 않네요.. 깔삼보이님 감사합니다^^ 근데 실행을 시키면 아무런...
    • 석주현
      2008.06.19 02:44
      Form2.QuickRep1.Prepare; 를 해주시고 Preview 를 하셔야 합니다.
    • 김길남
    • 2008.06.14 00:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.13 20:21
      이름으로 찾는 FindComponent를 사용해 보세요. 그리고 FrmMain는 그촘의 이름입니다. <!--CodeS--&...
    • 강태원
      2008.06.13 20:53
      아하 저런 함수가 있었군요. 감사합니다. 이제 할수 있을듯...^^
    • 이정욱
      2008.06.13 21:04
      한가지 더 팁을 알려드리면, FindComponent 를 사용하셔도 무방합니다. 하지만 성능상의 잇점을 조금...
    • 강태원
      2008.06.14 00:15
      아하.. 밑쪽의 방법도 괜찮은데요?^^; 근데 이미 다 해놨는데... 바꿔야 하나...(이놈의 게으름..-...
    • 석주현
      2008.06.14 11:52
      아래쪽의 방법이 더 나은거 같네요. 코드 컴프리트 같은 책이나 아니면 보통 프로그래밍 관련 책들을 ...
    • 천천히
    • 2008.06.11 23:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.12 02:22
      for문 다음에 rowcount := rowcount + 1; 이렇게하면 보이겠네요. 전번에 처럼 rowcount로 하시면...
    • 홍성락
      2008.06.12 04:38
      2가지 방법으로 해보겠습니다. 1방법은 그냥 넣을때 곰마를 넣습니다, 그러나 실제 데이타와 다르므로 ...
    • 천천히
      2008.06.13 00:06
      님말씀대로 formatfloat 함수
    • 홍성락
      2008.06.13 03:10
      FormatFloat인자가 Variant라서 그런가봅니다 Cells[1, i+1] := FormatFloat('#,##0', StrToFloat(VarTo...
    • 천천히
      2008.06.13 19:09
      홍성락님..답변 감사합니다.. 그런데 또 에러가... ㅠ..ㅠ Cells[1, i+1] := FormatFloat('#,##0', ...
    • 홍성락
      2008.06.13 20:15
      아마 위에서 말한것 처럼 데이타에 숫자가아닌 값이 있나 보네요. try를 사용해 함수내 놓거나 별고 함...
    • 천천히
      2008.06.14 00:26
      감사합니다.. 해결했습니다... ^^; 복 받으세요...
    • 플루토
    • 2008.06.11 01:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.11 05:23
      파일을 다운로드하든 메모리에 스트림으로 써넣든 클라이언트에 이미지자료가 오기전에는 불가능합니다.
    • 이정욱
      2008.06.11 06:26
      만약 이미지가 커서 그런다면, 이미지 썸네일을 생성 후 받아서 보여주시면 됩니다.
    • 장성호
      2008.06.10 03:14
      <!--CodeS--> procedure TForm1.Button2Click(Sender: TObject); var idx: Integer; begin ...
    • 강태원
      2008.06.10 18:05
      아 C++ 처럼 형변환이 가능하군요. 감사합니다.
    • 석주현
      2008.06.10 03:06
      DateTimeToFileTime(EncodeDateTime(2008,6,9, 17,25,00,00)); EncodeDateTime 으로 한번 해보세요. ...
    • 이정욱
      2008.06.11 00:29
      FileTimeToLocalFileTime 를 참고해보세요 ^^ 우리나라의 GMT 타임 존이 다르기 때문입니다. 위의 ...
    • 석주현
      2008.06.11 09:41
      역씨 정욱님 대단하시네요. ^^ 저도 좋은거 배웠네요.
    • 장성호
      2008.06.10 03:54
      OpenDialog에서 파일명이 들어가는 부분은 ComboBox 입니다. vcl에서도 마찬가지 그렇지만 ComboB...
    • 백록화
      2008.06.10 00:49
      edit 의 imemode 가 imDontCare 이라면...다른 콤포넌트의 영향을 받을수 있습니다. edit1 에 들어오기전...
    • 바다소리
      2008.06.10 01:16
      감사 합니다 검색을위해 호출되는 하위 폼의 edit box에 imemode를 한글로 했었는데 거기서 영향을 ...
    • 임정미
      2008.06.09 09:31
      해결했습니다. 배열크기는 SetLength(value , s_count); 로 정해놓고 for 문은 scount+1 만큼 ...
    • 이정욱
      2008.06.09 20:10
      윽.. 도와드리려고 했는데... 챙피해 하지 마세요 ^^; 전 더 한 실수도 많이 한답니다.ㅜㅜ 꽤 긴...
    • 석주현
      2008.06.09 22:26
      ㅎㅎ 저도 캡춰해서 분석하다가 말았습니다. 제가 보긴 코드를 좀 나누고 좀 리펙토링 하셔야 할 것 ...
    • 이정욱
      2008.06.06 13:13
      test (a,b) 로 그냥 호출 하시면 됩니다. 그리고 그냥 ShowMessage(b); 하시면 제데로 출력될 것입니...
    • 플루토
      2008.06.06 20:24
      네 감사합니다. 수정했어요^ ^
    • 구창민
      2008.06.06 03:02
      이정욱님 편역한...델파이7 Check 또는 아래 델마당에 어떤분이 추천하셨던 책이네요.. 류종택님 저서....
    • 홍성락
      2008.06.05 23:29
      자료실에 [문자를 좌로 스크롤 하는 소스-이미지 사용]으로 올렸습니다. 수정하시면서 사용해 보세요
    • 김광식
      2008.06.11 00:54
      감사합니다...
    • 화이팅
    • 2008.06.05 10:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2008.06.05 12:37
      기본적으로 DATA는 Query한값을 --> DataSource를 통해 --> DBGrid에 보여줍니다. 결과적으로 Query의 ...
    • 화이팅
      2008.06.07 05:33
      고맙습니다..^^ 덕분에 잘 해결되었습니다~
    • 왕초보
    • 2008.06.05 02:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.06.05 03:00
      포트 번호는 보통 Ip를 통해서 호스트를 찾고 포트번호를 통해서 호스트 내의 통신 접속점을 구분하기 위...
    • 장성호
      2008.06.05 06:22
      TServerSocket의 Port를 100000으로 하고 Active=true해 놓은후에 netstat -a 해보세요 TCP 에...
    • 석주현
      2008.06.04 22:54
      디버깅 하시면서 쿼리의 결과가 제대로 나오는지 확인 부터 해보세요. 디비 구성이 어떤지 모르지만 ...
    • 이정욱
      2008.06.04 22:57
      저도 가끔 이런경우를 보는데, 아마도 for 문의 최적화 때문일 수도 있습니다. 디버깅을 해보시면, co...
    • 석주현
      2008.06.04 23:20
      아 그러고 보니 정욱님 말씀 처럼 최적화에 따라 달라지는 경우가 있습니다. 음 저 같으면요. v...