DbGrid如何让字段值计时(按秒),几百条数据列表,怎样做到每条数据自动计时按秒显示而占用最少资源? ( 积分: 100 )

  • 主题发起人 主题发起人 yeszhang
  • 开始时间 开始时间
Y

yeszhang

Unregistered / Unconfirmed
GUEST, unregistred user!
数据表:TA
有字段
FID FCaption FBeginTime FMan FImage

现在客户要求能在数据列表筐(dbgrid)中显示每条数据创建时间到当前系统时间所使用的停留的时间,精确到秒。他们做物流的,就是要显示每个步骤所使用的时间统计。他们不乐意用按钮去刷新,就是看着窗口不做任何动作,DBgrid中的计时要每秒刷新一下。

我想如果每秒用update更新数据库,然后再读出来恐怕不行,占用资源太多了。
请问有什么好的方法?
 
你的动态数据,这么动态,没必要放在数据库,用stringGrid去做,大不了退出
时才写入数据库
 
好象只有一个FBeginTime,停留时间存到哪呢
在创建记录或退出时更新到数据库,用Timer每秒重画DBGrid显示停留时间
 
停留时间可以创建一个字段来保存。

使用time重画,怎么重画啊?你不更新数据库、再从数据库取出来还能怎么画?
 
FBeginTime第一次写入时就是创建时间,以后每隔一秒都用当前时间减FBeginTime,再写入到FBeginTime,楼主是这个意思吗?
 
创建一个新字段吧,叫停留时间。

停留时间:=现在时间-FBeginTime

停留时间每秒要会变动,至少再Dbgrid显示是跳动的。
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DBGrid.Repaint; //定时重绘显示区
end;

{ DBGrid的DoDrawColumnCell事件 }
procedure TForm1.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
Text: string;
begin
{ 判断将要重绘列是否是"停留时间"列,如果是就自己画,如果不是调用默认的 }
if Column.ID = 0 then
begin
Text := TimeToStr(Now); //计算时间
DBGrid.Canvas.FillRect(Rect);
DrawText(DBGrid.Canvas.Handle, PChar(Text), Length(Text), Rect,
DT_SINGLELINE or DT_LEFT or DT_VCENTER);
end
else
DBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部