Q&A

  • Listview에서 Ownerdata 사용시
아래와 같이 DB에서 읽은 자료를 Listview에 넣을려구 합니다. Ownerdata를 True로해서요..
그런데, 아래처럼하면 제일 마지막 자료만 Listview에 들어갑니다. 모두 Listview에 넣으려면 어떻게 해야되는지 고수님의 조언을 부탁드립니다.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, advlistv, Db, ZQuery, ZMySqlQuery, ZConnect,
  ZMySqlCon, ZTransact, ZMySqlTr;

type
  TForm1 = class(TForm)
    ListView: TAdvListView;
    Button1: TButton;
    ZMySqlTransact1: TZMySqlTransact;
    ZMySqlDatabase1: TZMySqlDatabase;
    Query: TZMySqlQuery;
    procedure Button1Click(Sender: TObject);
    procedure ListViewData(Sender: TObject; Item: TListItem);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  Item: TListItem;
begin
  Query.Open;
  if Query.RecordCount > 0 then
    Listview.Items.Count := Query.RecordCount;
end;

procedure TForm1.ListViewData(Sender: TObject; Item: TListItem);
begin
  if Query.Active then
  begin
    while not Query.Eof do
    begin
      Item.Caption := Query.FieldByName('fserial').AsString;
      Query.Next;
    end;
  end;
end;

end.
5  COMMENTS
  • Profile
    최용일 2004.04.27 00:42
    안녕하세요. 최용일입니다.

    TListView를 OwnerData로 사용할때 리스트뷰에서 데이터를 필요로 할 때 OnData이벤트가 발생합니다. 이 이벤트는 한번만 발생하는게 아니라 각각의 데이터가 필요할 때마다 개별적으로 발생합니다. 즉, 리스트뷰에 있는 아이템 갯수가 10개라면 10번발생하는거죠... 이 사실을 간과하고 OnData이벤트에서 while문으로 아이템의 데이터를 설정하니까 맨 마지막의 값만 들어가는겁니다.

    while문을 빼세요...

    ^^ 항상 즐코하세요...


  • Profile
    임준 2004.04.27 00:48
    먼저 최용일님의 답변에 대단히 감사드립니다.

    말씀하신 것처럼 while문을 빼서 실행해 보았는데 레코드 갯수만큼 자료가 들어가긴 하는데 첫번째 자료만 들어가네요...

    다시한번 도움을 ... 죄송^^;

    예)
    135
    135
    135

    이런식으로요.....

  • Profile
    최용일 2004.04.27 03:46
    안녕하세요. 최용일입니다.

    흠... 쿼리결과를 그대로 이용하는 것은 문제가 있어보이네요...

    리스트뷰가 아이템을 업데이트 할 때마다 Query.Next가 실행됩니다. 리스트뷰가 항상 0번 인덱스부터 전체를 업데이트하는게 아니고, 또한 이게 단 한번만 실행되는것이 아닙니다. Query.Nextt를 매번 실행하는 것은 리스트뷰를 제대로 업데이트 할 수가 없을거 같습니다.

    쿼리 결과를 다른 목록의 구조체(배열, TList, ...)로 옮겨 놓고 OnData이벤트에서 이 값들을 참조하는것이 좋을것 같습니다.

    몇번째 아이템인가는 파라매터로 들어오는 Item.Index를 참조하시면 됩니다.

    ^^ 항상 즐코하세요...

  • Profile
    박수영 2004.04.27 00:58

    델파이 help의 내용입니다.


    procedure TForm1.FormCreate(Sender: TObject);
    var
      I: Integer;
      ListItem: TListItem;
      NewColumn: TListColumn;
    begin
      // Create a ListView item for each image in the ImageList
      with ListView1 do
      begin
        SmallImages := ImageList1;
        LargeImages := ImageList1;
        for I := 0 to ImageList1.Count - 1 do
        begin
          ListItem := Items.Add;
          Listitem.Caption := 'Image' + IntToStr(I);

          ListItem.ImageIndex := I;
        end;
        // Create two columns to show during viewing as vsReport
        NewColumn := Columns.Add;
        NewColumn.Caption := 'Column 1';
        NewColumn := Columns.Add;
        NewColumn.Caption := 'Column 2';
        // Add View styles and constants to the Combo Box
        ComboBox1.Items.AddObject('vsIcon', TObject(vsIcon));
        ComboBox1.Items.AddObject('vsList', TObject(vsList));
        ComboBox1.Items.AddObject('vsReport', TObject(vsReport));

        ComboBox1.Items.AddObject('vsSmallIcon', TObject(vsSmallIcon));
        // Display first item in the Combo Box
        ComboBox1.ItemIndex := 0;
      end;
    end;


  • Profile
    임준 2004.04.27 01:17
    답변해 주신 내용에 대해 감사드립니다. 그러나, 아래 예제로 적어주신 부분은 Ownerdata 프로퍼티를 사용하는 부분과는 관계가 없는것 같습니다.

    다시한번 님의 조언에 감사 드립니다.


    • Galaxy
    • 2004.04.27 20:59
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2004.04.27 22:43
      MS-SQL 쿼리분석기를 설치해서 접속되는지 테스트 해보시는 것이 어떨까요 접속이 되면 델파이 BDE쪽 문제...
    • Galaxy
      2004.04.28 00:54
      답변 감사 드립니다. 퀴리 분서기를 이용하여 접속 시도을 했지만 연결이  되지가 않네요(역으...
    • 최용일
      2004.04.27 20:44
      안녕하세요. 최용일입니다. C++이나 델파이나 같습니다. 둘 다 동일한 Windows API를 쓰니까요... Ge...
    • sarang프돌
      2004.04.27 20:47
      안녕하세요..최용일님앙~~ 항상 존 정보 주셔서 감사드립니다. 해보다 안되면 또 질문 올리것음다......
    • 성더기
      2004.04.30 23:02
      기준이 되는 테이블 을 정하시고(보니깐 AA테이블 인거 같네요) Left Outer Join은 사용해 보세여 SELECT...
    • 박수영
      2004.04.27 19:56
      자료의 예좀...
    • 임순철
      2004.04.27 20:11
      특별한 자료는 아니고 AA 테이블은 구매자 코드번호 와 날짜 BB 판매금액,   CC 판매금액...
    • 너구리
      2004.04.27 20:36
      세 테이블이 1:1:1관계가 아닌가 보죠... 어라 조인이 하나 더 들어갔네요.. 마지막꺼는 빼도 되는거...
    • 임순철
      2004.04.27 21:12
      질문이 잘못되었네요. 그래도 많은 도움이 되었습니다. 감사합니다.
    • 최인권
    • 2004.04.27 18:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.04.27 19:32
      안녕하세요 하얀까마귀 입니다. 음. 그 기능이 없나요? 리포트에서 이미지 쓴지가 오래되어서 ㅎㅎㅎ ...
    • 최인권
      2004.04.27 20:11
      답변 정말 감사드립니다. 근데 좀 간단한 예제라도 들어주시면 안될까요? 전 그냥 QRTimage를 생성해서 ...
    • 최인권
    • 2004.04.27 18:36
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.04.27 19:25
      안녕하세요 하얀까마귀 입니다. 음... 하드웨어 인터페이스라면 보통 씨나 비베로 많이들 작업을 합니다....
    • 최인권
      2004.04.27 20:25
      친절한 답변 정말 감사드립니다. 제가 지금 제어해야 하는 것은 Bill Acceptor 입니다. 지폐를 넣고 넣은...
    • sunny
    • 2004.04.27 12:11
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박수영
      2004.04.27 17:44
      잉 테스트 결과 잘 되는디요......
    • 장태원
      2004.04.27 20:04
      어딘가 찾아 보면, MDI 폼에 이미지 넣어주는 컴퍼넌트가 있긴 한데, 폼이 리사이징될 때, 약간 이상해...
    • 초짜그래머
      2004.04.29 06:51
      여기저기 떠돌다가, delphikorea.com 에서 우동진님의 글이 있어서 참조 했습니다. 우동진님이 링그...
    • 박수영
      2004.04.27 18:04
      전 이상하게도 RecNo가 안 되서 마지막 자료만 나오는데요... 근디 버그 하나는 찾았어요... ...
    • 임준
      2004.04.27 18:14
      먼저, 답변에 진심으로 감사드립니다. +1을 한 이유는 마지막 데이터가 안 나오길레....
    • 이재욱
    • 2004.04.27 03:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.04.27 03:36
      안녕하세요. 최용일입니다. TStrings객체는 추상객체입니다. 때문에 직접 인스턴스를 만들어서 사용하기...
    • 이재욱
      2004.04.27 03:46
      감사합니다. ^^ 그런게 있었군요. ^^
    • 포맨21
      2008.12.15 04:25
      감사합니다.. 문제 해결... 구글 보다 낳네요..
    • 석주현
      2004.04.27 02:57
      이렇게 하면 될꺼예요.. ^^ 음냐 원래 값이 아마도 더블형으로 저장이 되니깐요.. ^^ 그럼 아래 소스...
    • 김동열
      2004.04.27 18:34
      이렇게 했을경우 날짜가 1루 차이면 괜찬은데.. 이틀 차이가 날경우도 19가 나오네여... '2004-04-27 10:...
    • 석주현
      2004.04.27 18:57
      음냐 응용을 하실 수 있으실줄 알았는데 --;; 쩝.. 음 간단합니다.. 위에꺼 가지고 DecodeDa...
    • 이태경
    • 2004.04.27 00:47
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김민정
    • 2004.04.27 00:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박수영
      2004.04.27 00:39
      Timer를 이용해서 해 보세요...
    • 맑은물
    • 2004.04.27 00:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 맑은물
      2004.04.27 00:45
      sql컴포넌트의 sql속성에 다음과 같은 sql문을 사용하고 있습니다. select * from aTbale where trim(id...
    • [勳]후니
      2004.04.27 03:37
      query 컴포넌트를 더블클릭하면 플드 등록 부분이 있습니다. 그부분에 필드가 등록되어 있는지 확인해보...
    • 임준
    • 2004.04.26 23:56
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.04.27 00:42
      안녕하세요. 최용일입니다. TListView를 OwnerData로 사용할때 리스트뷰에서 데이터를 필요로 할 때 OnD...
    • 임준
      2004.04.27 00:48
      먼저 최용일님의 답변에 대단히 감사드립니다. 말씀하신 것처럼 while문을 빼서 실행해 보았는데 레코드...
    • 최용일
      2004.04.27 03:46
      안녕하세요. 최용일입니다. 흠... 쿼리결과를 그대로 이용하는 것은 문제가 있어보이네요... 리스트...
    • 박수영
      2004.04.27 00:58
      델파이 help의 내용입니다. procedure TForm1.FormCreate(Sender: TObject); var   I: ...
    • 임준
      2004.04.27 01:17
      답변해 주신 내용에 대해 감사드립니다. 그러나, 아래 예제로 적어주신 부분은 Ownerdata 프로퍼티를 사용...
    • 너구리
      2004.04.27 01:22
      디비가 뭔지요.. oracle 이라면 where 절에 rownum < 10? 11? 이렇게 넣어줘야 합니다. 하...
    • 석주현
      2004.04.27 03:53
      Function 이기 때문에 리턴 값을 갖게 되죠.. result:=(Pages.Objects[PageIndex] as TPage).Contro...
    • 박수영
    • 2004.04.26 22:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.04.27 03:48
      제가 그냥 보면 아실정도만 작성한 예입니다.. 날림입니다.. --;; 보시면 아실 수 있을꺼라 믿습니다...
    • 박수영
      2004.04.26 22:00
      이벤트에  onEnter, onExit에 각각 코딩하시면 됩니다....
    • 김의태
      2004.04.26 22:55
      아...무슨말인지 몰랐는데... 다시 생각해서 해보니까 되네요... 답변 감사드립니다....즐프~~^^
    • 박수영
      2004.04.26 22:57
      OnEnter는 Focus가 해당 Component에 있을때 발생하구요 OnExit는 Focus가 해당 Component를 벗어...