2009-11-12 3 views
3

Access 데이터베이스 (* .mdb)를 사용하는 응용 프로그램을 작성하고 싶습니다. mdb에 연결하는 방법과 SQL 문을 사용하는 방법을 알고 있습니다. 내 문제는 쿼리의 결과를 TListView에 넣고 싶다는 것입니다. 당신의 데이터 그리드를 필요로하는 경우, 당신이 할 수있는 -델파이 및 액세스 작업

는 모든 정보/링크/책 :

+0

ms 액세스 또는 Jet/ACE와 아무런 관련이 없으므로 ms 액세스 태그와 함께 유용한 정보는 없습니다. –

+1

MS 월드 사용 SQL Server Express 대신에 smoehow "STEROIDS에 대한 액세스"가 있습니다. 무료입니다. – LaBracca

답변

3

당신의 결과를 당긴 다음 (예) 다음 절차에 전달 :

Query.First; 
While not Query.EOF do 
    begin 
    StrObj := tStringList.create; 
    StrObj.Add(Query.FieldByname('id').asString); 
    ListView.AddItem(Query.FieldByName('Title').AsString,StrObj); 
    Query.Next; 
    end; 

이것은 필드 이름 타이틀로 명명 된 노드 목록보기를로드하고, 각 노드가 포함 된 TStringList를 포함됩니다 어떤 각 노드에 대해 저장하려는 데이터 개인적으로 저는 이것을 확장하고 tStringList가 아닌 custom holder 객체를 사용합니다. 그러나 이것은 단지 예일뿐입니다.

+1

이 루프 전에 Query.First를 호출해야합니다 ... –

2

뷰 TListView는 데이터 인식 구성 요소가 아닙니다, 그리고 (AFAIK)는 VCL TDBListView이없는 을 환영합니다 TDBGrid에 바인딩하거나 빠른 Google에서 찾을 수있는 TDBListView 세 번째 파트를 사용하십시오.

+0

테이블에서 데이터를 읽고 ListView에 삽입 할 수 있다고 생각합니다. –

+0

예. 그렇게 할 수 있습니다.그러나 Delphi는 원하는 데이터베이스 테이블이나 쿼리에 액세스 할 수있는 데이터 인식 컨트롤을 제공합니다. –

+0

@ Remus, Gamecat이 맞습니다. 물론 데이터 셋을 반복하고, 열 구조를 매핑하는 객체 목록을 만든 다음 목록의 각 항목에 대한 객체 속성을 listview에 바인딩하여 listview를 채울 수 있습니다. 이것이 당신이 관심을 가지고있는 접근입니까? 이 접근 방식을 선호한다면 tiOPF 또는 이와 동등한 것을 사용해야한다. –

1

각 레코드를 TListView에 추가 할 수 있습니다. 레코드를 반복하면서 필드의 내용을 필요한 컨트롤에 넣기 만하면됩니다.

그러나 Delphi는 데이터 인식 컨트롤을 제공합니다. 그것은 데이터베이스 연결을 처리합니다. 대부분의 응용 프로그램을 위해서는 이것으로 충분합니다.

1

데이터베이스와 함께 작동하는 VirtualTreeView의 구현이 있습니다. 여기에 one link이 있으며 여기에 VirtualTreeView web site이 있습니다.

+0

TreeView 및 ListView는 다른 컨트롤입니다. –

+0

나는 그것을 알고 있었다. Mustang Peak Software @ http://www.mustangpeak.net/의 Virtual ListView 구현이 있습니다. – Mihaela

2

연결되지 않은 데이터 집합을 나타내는 데 ListView를 사용하면 Delphi 데이터베이스 응용 프로그램에서 가장 좋아하는 디자인 패턴입니다. ListView 컨트롤은 vsReport가 행 및 열 (다른 데이터는 vsList, vsIcon 및 vsLargeIcon)과 함께 데이터 테이블처럼 보이는 여러 가지 표시 형식을 제공합니다.

"항목"(적어도 vsReport가 표시 스타일 일 때 행에 매핑되는)을 만들려면 ListView의 Items 컬렉션에서 AddItem()을 호출하십시오. AddItem은 TListItem 형식의 개체를 반환합니다. vsReport에서 설명이되는 항목 (vsList, vsIcon 및 vsLargeIcon 스타일) 및 "table"의 첫 번째 열에 캡션을 지정할 수 있습니다. 목록 항목에는 SubItems라는 TStringList 속성도 있습니다. SubItems에 추가 된 각 문자열은 vsReport 모드의 다른 열에 대한 데이터를 제공합니다 (다른 모드에서는 SubItem이 무시됩니다).

마지막으로 정수 기본 키 값을 원본 데이터베이스 레코드에 다시 연결하려면 TListItem의 데이터 멤버를 사용하여이 작업을 수행 할 수 있습니다. 이것은 항목과 관련된 객체에 대한 포인터이지만 정수를 캐스팅하고 멀리 저장할 수 있습니다.

그래서, 예를 들면 :

이 당신에게 당신이 사용자가 목록보기에서 선택 어떤 기록을 찾을 수 있도록 기본 키 값과 함께, DS의 데이터를 포함하는 목록보기를 제공
DS := TSomeKindOfDataSet.Create(); 

try 

    //Set up and open DS. 

    while not DS.eof do begin 

     with ListView.Items.Add() do begin 

      //establish three columns for vsReport display 
      Caption := DS.FieldByName('DescriptiveField').AsString; 
      SubItems.Add(DS.FieldByname('AnotherColumn').AsString); 
      SubItems.Add(DS.FieldByname('YetAnotherColumn').AsString); 

      //Save the record's PK value 
      Data := Pointer(DS.FieldByname('PKColumn').AsInteger); 

     end; 

     DS.Next; 

    end; 

finally 

    DS.Free; 

end; 

. 사용자가 목록보기로 작업하는 동안 DS가 닫히고 처리되므로 데이터베이스에 대한 지속적인 요구가 없습니다.