使用Delphi和Access

时间:2009-11-12 23:44:43

标签: delphi ms-access

我想编写一个使用Access数据库(* .mdb)的应用程序。我知道如何连接到mdb以及如何使用SQL语句。我的问题是我想将查询结果放入TListView。

欢迎任何信息/链接/书籍 :)

5 个答案:

答案 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