2009-11-12 84 views
3

我想編寫一個使用Access數據庫(* .mdb)的應用程序。我知道如何連接到mdb以及如何使用SQL語句。我的問題是我想將查詢的結果放入TListView中。使用Delphi和Access

任何信息/鏈接/本書歡迎 :)

+0

毫無用處的是ms-access標籤,因爲沒有任何問題與ms-access或Jet/ACE有關。 – 2009-11-13 21:02:40

+1

如果你被綁定到MS世界使用SQL Server express代替,它是smoehow「訪問STEROIDS」,它是免費的 – LaBracca 2013-02-22 10:06:34

回答

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,但這僅僅是一個例子。

+1

確保在此循環之前調用Query.First ... – 2009-11-13 01:17:24

2

TListView的不是數據感知組件,並沒有(據我所知)一個VCL TDBListView - 如果你需要數據的網格,你可以要麼綁定到TDBGrid,要麼使用第三部分TDBListView,您可以通過Google快速找到它。

+0

我認爲我可以從表中讀取數據並將其插入到ListView中 – 2009-11-12 23:51:04

+0

是的,你可以這樣做。但德爾福有數據感知控件,可以訪問任何數據庫表或查詢你喜歡的。 – 2009-11-12 23:54:06

+0

@Remus,Gamecat是對的。當然,您可以循環使用數據集,構建映射列結構的對象列表,然後通過將列表中的每個項目的對象屬性綁定到列表視圖來填充列表視圖。這是你感興趣的方法嗎?如果你喜歡這種方法,你應該使用像tiOPF或同等的東西,它爲你做這一切。 – 2009-11-12 23:59:41

1

您可以將每條記錄添加到TListView。循環遍歷記錄並將字段的內容放入所需的控件中。

但是Delphi提供了數據感知控件。這關注數據庫連接。對於大多數應用程序來說就足夠了

1

VirtualTreeView有一些與數據庫一起工作的實現。 這是one link,這裏是VirtualTreeView web site

+0

TreeView和ListView是不同的控件。 – 2009-11-13 04:04:45

+0

我意識到這一點。由Mustang Peak Software @ http://www.mustangpeak.net/實現了Virtual ListView。 – Mihaela 2009-11-13 05:02:44

2

使用ListView來表示一組斷開的數據是我最喜歡的Delphi數據庫應用程序的設計模式。 ListView控件提供幾種不同的顯示格式,其中vsReport是一個看起來像具有行和列的數據表(其他是vsList,vsIcon和vsLargeIcon)。

要在ListView的Items集合中調用AddItem(),創建「items」(映射到行,至少在vsReport是顯示樣式時)。 AddItem將返回一個TListItem類型的對象。您可以將一個Caption指定給成爲描述的項目(在vsList,vsIcon和vsLargeIcon樣式中)以及vsReport中「表格」的第一列。該列表項還具有名爲SubItems的TStringList屬性。添加到SubItems中的每個字符串將爲處於vsReport模式的其他列提供數據(在其他模式中,子項會被忽略)。

最後,如果您想將整數主鍵值關聯回原始數據庫記錄,則可以使用TListItem的Data成員來完成此操作。這是一個指向與該項目關聯的對象的指針,但您可以投射一個整數並將其存儲在那裏。

所以,舉例來說:

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的數據,與主鍵值一起,這樣就可以定位用戶選擇列表視圖中的任何記錄的列表視圖。 DS在用戶處理列表視圖時關閉並處理,因此對數據庫沒有持續的需求。