Q&A

  • 이해할수 없는 DBLookupCombobox
안녕하세요.. ^^;;

첨으루 DBLookupCombobox를 써보려고 책이랑 여기 게시판을 이래저래 뒤져서 만들어보았습니다.
해결안되는 문제가 하나 있는데 그건 아무리 찾아봐도 못찾겠네요.

DBLookupcombobox를 하나 놓고 DBGrid도 하나 놓고, 테이블 컴포넌트는 하나를 가지고 씁니다.
콤보박스에서 선택하면 디비그리드에서 해당 레코드로 이동할 수 있도록요.
그리고 반대로 디비그리드에서 선택하면 그에 맞게 콤보박스의 keyvalue를 주었는데요, 제가 하고자했던데로 되기는 잘 됩니다. 근데 그러고나서 콤보박스를 마우스로 클릭하면 원래의 keyvalue(소스상에서 keyvalue값을 주기 전의 값)가 선택이 되어 리스트되어집니다.

이게 어찌된 일인지.....?
어흐흑... @_@
5  COMMENTS
  • Profile
    nilriri™ 2003.05.28 12:06
    샬롬~

    ㅡㅡ; 그럴리가??

    지금 컴에 델파이가 없어서 직접 테스트 해보진 못하겠지만..

    테이블하나,  룩업하나,  그리드하나,   데이터소스 하나를 사용하신거 맞나요?

    테이블을 데이터 소스에 연결하고..

    데이터 소스를 룩업과 그리드에 연결하신거죠?

    그럼..둘중에 하나만 레코드가 바뀌면..현재 레코드가 바뀌는 이벤트가

    데이터 소스 컨트롤에서 일어나는데....

    그럼..룩업하고..그리드하고 똑같이 변화가 생길거 같은데요..

    직접 테스트 해보진 않았지만..제 기억으론 이렇습니다..

    다시 한번 확인해 보시구요..패치도 확인해 보십시오..^^;;

    즐프~

  • Profile
    또치 2003.05.28 22:48
    그러고보니, 정말 하나의 데이타소스를 썼으니깐 디비그리드에서 레코드가 바뀌면 룩업도 같이 바뀌는게 맞을거 같은데.. 이상하네요.
    룩업이 바뀌면 디비그리드의 레코드는 바뀌던데, 거꾸로 디비그리드를 선택할때엔 룩업이 안바뀌었어요. 그래서 제가 데이타소스체인지 이벤트에서 따로 KeyValue값을 주었던거거든요.
    어, 뭐가 문제지....? -0-

  • Profile
    nilriri™ 2003.05.29 05:55
    샬롬...
    데이터 소스의 데이터 체인지 이벤트에 코드를 작성해서 그랬네요..
    procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin

    end;

    아래..셀 클릭에 작성하시면 이상이 없이 잘 되는군요..
    그런데..그리드 옵션에 Edit속성을 false로 해줘야 클릭 이벤트가 정상적으로 작동하는군요..
    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
       DBLookupComboBox1.KeyValue := ADOTable1.Fields.FieldByName(DBLookupComboBox1.KeyField).AsString;
    end;


    데이터 소스의 데이터 체인지 이벤트에 기술을 하면..

    디비 룩업 콤보 박스의 상위 개체인 TDBLookupControl의 locationkey라는 프로시져가 실행되면서 룩업 콤보박스의 데이터 체인지 이벤트를 다시한번 타게 됩니다. 그래서 콤보박스 클릭시 나오는 리스트와 연결된 데이터 소스의 레코드 포인터가 맨 처음으로 이동하게 되더군요..

    function TDBLookupControl.LocateKey: Boolean;
    var
      KeySave: Variant;
    begin
      Result := False;
      try
        KeySave := FKeyValue;
        if not VarIsNull(FKeyValue) and FListLink.DataSet.Active and
          FListLink.DataSet.Locate(FKeyFieldName, FKeyValue, []) then
        begin
          Result := True;
          FKeyValue := KeySave;
        end;
      except
      end;
    end;

    위에서 false가 리턴되게 되고..

    {이건 룩업콤보의 우측삼각형 버튼을 클릭했을때..아래쪽으로 펼쳐진 모양의 리스트 박스를 나타내 주는 겁니다...}
    procedure TDBLookupListBox.KeyValueChanged;
    begin
      if ListActive and not FLockPosition then
        if not LocateKey then ListLink.DataSet.First;   //<<=== 이분에서 맨처음으로 포인터 이동...
      if FListField <> nil then
        FSelectedItem := FListField.DisplayText else
        FSelectedItem := '';
    end;


    이 프로시져에서..  
    레코드 포인터가 맨 처음으로 이동되어 버리는 겁니다.

    즐코~


  • Profile
    또치 2003.05.29 08:11
    아, 이렇게까지 자세히 설명해 주시다니 너무너무 감사해요.
    움, 근데 저두 안되서리 이리저리 해보다가 셀클릭이벤트에도 넣어봤는데, 디비그리드의 에디트 속성을 True로 해줘야만 하기땜에 그것도 안되겠더군요.
    아, 이대로 써야하는것인가!!
    어쨌든, 설명 정말 감사합니다.
    저도 뭐가 안될땐 고개만 갸우뚱하지 말고 클래스 소스를 뒤져보는 습관을 길드여야겠어요. ^^
    그럼 즐프~

  • Profile
    nilriri™ 2003.05.29 04:48
    샬롬~

    우선.. 많이 혼선을 드린거 같네요..ㅡㅡ; 지송스러버라..

    결론부터 말하자면..님과 같은 현상이 발생하더군요..직접 해보니..
    (델6, 윈98, mssql, ado)상태에서..

    해서 TDBLookUpComboBox소스를 열어서 확인은 했죠..

    그랬더니..  FieldItemIndex라는 넘이 있는데..
    룩업 리스트를 보기위해 클릭할때..다시 0으로 돌아가 버리더군요..

    해서..상위 객체의 메소드를 훝어 봤죠....

    콤보박스에 삼각형 그려진 버튼을 클릭할때..리스트 박스를 아래에 붙여서
    보여주는 작업을하는 부분을..

    그랬더니..아니나 다를까..리스트 박스를 생성하면서 레코드셋을 맨 처음으로
    이동하는 코드가 들어있더군요..

    그런데..이상한 것은 콤보박스에서 작업을 햇을때는 이상이 없는데..

    콤보박스의 .KeyValue :=  값  해서 바꿔준 경우는

    다음번 클릭할때 다시 그 값을 인식을 못한다는 거죠...

    원인을 찾아보고 있긴 한데...ㅡㅡ;

    이거 버그인지..아니면..이게 정상적인 건지. 모르겠네요..

    해결하면 다시 리플 달아주세영~~

    즐프~


    • yosule
      2003.05.30 11:24
      Table 컴포넌트의 프로퍼티 Exists를 사용하세요! property Exists: Boolean;
    • 김경남
    • 2003.05.28 20:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.06.09 02:50
      안녕하세여. 타락임다.. 트레이가 오에스를 가릴이유는 없습니다.. 아마 사용법에 실수가 있을 겁니...
    • KDDG_ZZOM
      2003.05.28 21:14
      이상하다... 전 아무이상없이 잘 되는데... 전 창민이가 올린것 보고 만들었는데... 자되고 있거든요.....
    • ㉯㉰감자
      2003.05.29 02:19
      BDE를 사용하는 방법도 있지만 이 방법은 BDE도 같이 배포를 해야 한다는 문제가 있습니다 ADO는 윈도...
    • 안기연
    • 2003.05.28 20:04
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박준철
    • 2003.05.28 19:54
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.06.09 03:05
      안녕하세여. 타락임다.. FTP 프로토콜은 기본적으로 TCP/IP보다 속도가 빠르고 안전성이 떨어집니다. ...
    • 혜월
      2003.05.29 01:41
      델마당 자료실에 버전관리 파일다운로드 프로그램이 있습니다 그걸 사용해 보세요
    • major
      2003.05.28 21:24
      안녕하세요... 정말 오랜만에 여기 사이트에 올라오네요... 흠흠... 서두가 좀 길군요...^^; 어...
    • 박준철
      2003.05.29 23:04
      타임아웃은 어느정도가 적당한 건가요 ?
    • 질문맨~
    • 2003.05.28 19:52
    • 2 COMMENTS
    • /
    • 0 LIKES
    • ㉯㉰감자
      2003.05.29 00:36
      저넘 사용하니깐 그런 증상이 나오던데... 결국 상용 tcp콘트롤로 해결한 경험은 있네요... 좀더 자...
    • 질문맨~
      2003.05.29 20:02
      Object에서 하는 일은 다른 서버에 설치되어 있는 데몬이랑 tcp통신을 통해서 데이타를 가져오는 역할을 ...
    • 엄태효
    • 2003.05.28 19:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ㉯㉰감자
      2003.05.30 00:36
      델마당에 답변있다고 이야기 해도 되겠지만 한델만 이용하시는 님들이 계실것 같구... 질문 했는데 ...
    • 양승철
    • 2003.05.28 11:30
    • 2 COMMENTS
    • /
    • 0 LIKES
    • ㉯㉰감자
      2003.05.28 19:40
      1. 보통 ClientSocket에서 Connect하고 바로 데이터를 날려도 잘 되는 편인데    님처럼 증상이...
    • 타락천사
      2003.05.28 18:12
      Visual C++ 의 AsyncSocket 과 비슷합니다.   둘다 윈속을 포팅해서 쓰는 거고요. 제가 보기...
    • 이정은
    • 2003.05.28 10:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2003.05.28 11:56
      샬롬~ 어떤 상황인지 모르겠지만..제가 보기엔 충분히 가능성있습니다. fieldCount도 구해지고.. ...
    • 오선배
      2003.05.28 18:24
      Sql 문장이 많이 틀렸내요 Top+cnt 는 왜 쓰는지  그렇게 쓰면 문장 자체가 Error dd1:= dd...
    • nilriri™
      2003.05.28 19:20
      샬롬~ Top 이라는건 MS_SQL에 있는겁니다. SELECT TOP 100 * FROM TB_ZIPCODE WHERE ZIP_SIDO LIKE...
    • 첨시작델
      2003.05.28 20:24
      ㄳ합니다..저에게 도움을 주어서여...^^그럼 옆에..[1]이라는거는 모를뜻하는건가여...혹시아시면 좀 알려...
    • 오선배
      2003.05.28 23:22
      Format(' Where A01_AAAAAA''%s'' ',['1']);    말그대로   이 A01_AAAAAA &...
    • nilriri™
      2003.05.28 12:00
      샬롬~ 앞뒤로 몇문장만 더 봤으면 좋으련만.. ㅡㅡ; 문장이 이해가 안가네요.. dd1:= dd1 + Forma...
    • 남경만
    • 2003.05.28 09:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상기
      2003.05.28 10:23
      procedure TForm1.Button1Click(Sender: TObject); var   Button: TButton;  ...
    • nilriri™
      2003.05.28 11:53
      샬롬~ 멀티 셀렉트 인가하는 프로퍼티가 있습니다. 그거이용하면 컨트롤키와 쉬프트키 마우스를 이용해...
    • 조건일
      2003.05.28 06:43
      음... 잘 보면 아주 간단하게 보이는 문제네염...ㅋㅋㅋ 다음과 같이 보면 이해하기 쉬워집니다.. va...
    • 첨시작델
      2003.05.28 20:25
      ㄳ해여...답변을 주어서여...그럼 숫자2를 3을 써도 상관이 없겠네여.. 그럼 받는값을 2를 받고 3을 받는...
    • 이종택
    • 2003.05.28 06:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 미친코딩
      2003.05.28 18:20
      질문하신게 너무 광범위하네요. 그래도 조금 설명을 드리죠. 글로는 자세히 하기 정말 뭐하네요. dbe는 ...
    • 정수지
    • 2003.05.28 03:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.05.28 04:38
      SUM(F20) F20,... 이런식으로 알리아스를 줘보세요... 즐프하세요...
    • 장덕곤
      2003.05.28 09:14
      제가 알기로는 sum을 할때는 sum을 제일앞으로 빼야된다고 알고있어요 그리고 알리어스를 쓰구요 디비그...
    • 이광영
    • 2003.05.28 02:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박정일
      2003.05.31 22:33
      Port가 기존의 시리얼인지 USB에서 변환된 가상Port인지를 구분하기는 힘들것같네요... 다만, 현재 PC에 ...
    • 이광영
      2003.06.02 19:51
      정말 고맙습니다.
    • 망내
    • 2003.05.28 02:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2003.05.28 02:42
      안녕하세요. 한원희입니다. OnChange 이벤트 핸들러를 구현하면 될것 같네요. procedure Edit1Change...
    • 박형근
    • 2003.05.28 02:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2003.05.28 05:42
      안녕하세요... 우선 퀵 레포트 버젼이 어떻게 되시나여 ? 정품주고 사셨나요 ? 아니면 델파이에서 제...
    • 또치
    • 2003.05.28 01:51
    • 5 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2003.05.28 12:06
      샬롬~ ㅡㅡ; 그럴리가?? 지금 컴에 델파이가 없어서 직접 테스트 해보진 못하겠지만.. 테이블하나...
    • 또치
      2003.05.28 22:48
      그러고보니, 정말 하나의 데이타소스를 썼으니깐 디비그리드에서 레코드가 바뀌면 룩업도 같이 바뀌는게 맞...
    • nilriri™
      2003.05.29 05:55
      샬롬... 데이터 소스의 데이터 체인지 이벤트에 코드를 작성해서 그랬네요.. procedure TForm1.DataSourc...
    • 또치
      2003.05.29 08:11
      아, 이렇게까지 자세히 설명해 주시다니 너무너무 감사해요. 움, 근데 저두 안되서리 이리저리 해보다가 ...
    • nilriri™
      2003.05.29 04:48
      샬롬~ 우선.. 많이 혼선을 드린거 같네요..ㅡㅡ; 지송스러버라.. 결론부터 말하자면..님과 같은 현상...