我想编写一个使用Access数据库(* .mdb)的应用程序。我知道如何连接到mdb以及如何使用SQL语句。我的问题是我想将查询结果放入TListView。
欢迎任何信息/链接/书籍 :)
答案 0 :(得分: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;
这将使用fieldname标题命名的节点加载列表视图,每个节点将包含一个tstringlist,其中包含您要为每个节点存储的数据。我个人会扩展它并使用自定义holder对象而不是tStringList,但这只是一个例子。
答案 1 :(得分:2)
TListView不是数据感知组件,并且没有(AFAIK)VCL TDBListView - 如果需要数据网格,可以绑定到TDBGrid,也可以使用第3部分TDBListView,你可以找到一个快速的谷歌。
答案 2 :(得分:2)
使用ListView来表示断开连接的数据集是我最喜欢的Delphi数据库应用程序设计模式。 ListView控件提供了几种不同的显示格式,其中vsReport看起来像一个包含行和列的数据表(其他的是vsList,vsIcon和vsLargeIcon)。
要创建“items”(映射到行,至少在vsReport是显示样式时),您可以在ListView的Items集合上调用AddItem()。 AddItem将返回TListItem类型的对象。您可以为成为描述的项目(在vsList,vsIcon和vsLargeIcon样式中)和vsReport中“表”的第一列分配标题。列表项还具有名为SubItems的TStringList属性。添加到SubItems的每个字符串将在vsReport模式下为另一列提供数据(在其他模式中将忽略SubItems)。
最后,如果要将整数主键值关联回原始数据库记录,可以使用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将关闭并处理掉,因此数据库没有持续的需求。
答案 3 :(得分:1)
您可以将每条记录添加到TListView。只需循环记录并将字段的内容放入所需的控件中。
但是Delphi提供了数据感知控件。这照顾数据库连接。对于大多数应用来说,这已经足够了。
答案 4 :(得分:1)
VirtualTreeView的一些实现可以与数据库一起使用。 这是one link,这里是VirtualTreeView web site。