数据库中记录如下:
姓名 性别 成绩 时间
张三 男 90 2005-9-1 10:00:00
李四 女 80 2005-9-2 10:00:00
张三 男 92 2005-9-3 10:00:00
王五 男 83 2005-9-4 10:00:00
李四 女 80 2005-9-4 11:00:00
…… ……
…… ……问题:在DBGrid或者Listview中根据“时间”显示数据库中每个人的最新一条记录(在数据库中未知有多少人的情况下),麻烦各位高手帮看一下,谢谢!
姓名 性别 成绩 时间
张三 男 90 2005-9-1 10:00:00
李四 女 80 2005-9-2 10:00:00
张三 男 92 2005-9-3 10:00:00
王五 男 83 2005-9-4 10:00:00
李四 女 80 2005-9-4 11:00:00
…… ……
…… ……问题:在DBGrid或者Listview中根据“时间”显示数据库中每个人的最新一条记录(在数据库中未知有多少人的情况下),麻烦各位高手帮看一下,谢谢!
insert into info values('张三','男',92,'2005-9-3')
insert into info values('王五','男',83,'2005-9-4')
insert into info values('李四','女',80,'2005-9-1')select * from info where 时间 in(select max(时间) from info group by 姓名)结果:
/*
李四 女 80 2005-09-02 00:00:00.000
张三 男 92 2005-09-03 00:00:00.000
王五 男 83 2005-09-04 00:00:00.000
*/
给ListView添加Item
给窗体添加FormShow事件:
procedure TForm1.FormShow(Sender: TObject);
var
ListItem:TListItem;
sqlf:string;
i:integer;
begin
ListView1.ViewStyle:=vsReport;
ListView1.ReadOnly:=True;
ListView1.RowSelect:=True;
With ADOQuery1 do
begin
ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=localhost';
Active:=False;
sqlf:='select 姓名,性别,成绩,时间 from info where 时间 in(select max(时间) from info group by 姓名)';
sql.Text:=sqlf;
Active:=True;
if RecordCount >0 then
begin
for i:=0 to RecordCount-1 do
begin
ListItem:=ListView1.Items.Add;
ListItem.Caption:=Fields[0].AsString;
ListItem.SubItems.Add(Fields[1].AsString);
ListItem.SubItems.Add(Fields[2].AsString);
ListItem.SubItems.Add(Fields[3].AsString);
Next;
end;
end;
end;
end;