【发布时间】:2013-12-22 20:15:31
【问题描述】:
我需要一些帮助,因为在进行了一些搜索后我没有看到任何解决方案...
我有一个数据库 Database.mdb,其中有几个表,我正在读取特定的表 Fixtures,其中包含字段 ID、ChNo、默认值和制造商;
然后我有一个表单,我希望用户能够从每个夹具中进行选择,但希望首先按制造商对其进行排序。 因此,我在表单上添加了 ListBox 组件,并开始使用提供的代码填充它:
procedure TPatchNew1.FormShow(Sender: TObject);
var No, No2: integer;
begin
No2:=0;
AdoQuerySearchFixtures.SQL.Text:='SELECT Manufacturer FROM Fixtures';
AdoQuerySearchFixtures.Open;
ManuNo:=AdoQuerySearchFixtures.RecordCount;
While No2 < No do
begin
ManufacturerListbox.Items.Add;
AdoQuerySearchFixtures.Close;
AdoQuerySearchFixtures.SQL.Clear;
AdoQuerySearchFixtures.SQL.Text:='SELECT Manufacturer FROM Fixtures WHERE ID='+IntToStr(No2+1);
AdoQuerySearchFixtures.Open;
ManufacturerListbox.Items[No2].Caption:=AdoQuerySearchFixtures.Fields[0].AsString;
No2:=No2+1;
end;
end;
这可以解决问题,但我希望首先:合并所有重复项,以便只有在单击 Listbox 项后才会显示具有相同制造商字段值的灯具(我相信我能够将 SQL 文本更改为“WHERE Manufacturer=something”),但如果我有 90 个来自同一制造商的灯具,则列表框中没有 100 个项目; 最后,在填充列表框之前,我希望它按字母顺序排序,从 A 到 Z。 我应该先读取所有制造商对记录或数组进行排序,然后找到重复并删除它们,然后对其进行排序,最后填充到列表框项,还是有其他方法? 就是这样,怎么办?经过这一天我放弃了.. :(
谢谢。
干杯
【问题讨论】:
-
打开查询统计记录,然后分别查询每一项?排序和分组可以很容易地由数据库查询本身完成。所以首先开始学习数据库教程
-
您没有任何具体问题,而是在寻求建议,所以我认为这对 SO 来说是个坏问题。正如 Rufo 提到的,您可以使用 SQL 来完成(但您至少需要学习 SQL 的基础知识)或预加载所有数据并在内存中执行您想要的操作(例如在数组中)。
-
抱歉迟到了,放假了……[祝所有bdw圣诞快乐]。嗯,我确实检查了很多关于数据库查询的内容,但是从来没有看到像在查询本身中排序这样的东西。但这不会使查询变得非常繁忙和缓慢吗?我的意思是,我将拥有一个包含多个表的数据库,我基本上一直在从中读取和写入。一个表每 0,5 秒写入条目,每 0,5 秒读取 2 个表,对于所有行值,所以我想将排序和其他工作挂到程序本身......这不是一个好主意吗?
-
@AndreiGalatyn,如果我来寻求建议,我很抱歉......但是,从我的角度来看,我什至不知道该怎么做,而不是我不知道怎么做以最好的方式做到这一点......所以这就是为什么我认为这是一个问题......:/我必须说,同时我感谢从 SO 学到的所有帮助和知识,我有点失望你们有时如何对所问的基本问题表现得如此苛刻。毕竟,它是一个论坛,它是开放的,人们可以提出问题,而没有一个问题是针对你们任何专家的。这是一个帮助和回答的选择——你总是这样做,但也经常批评..
标签: database delphi ms-access listbox delphi-xe3