文本字段中的先进先出行

时间:2016-03-03 21:53:37

标签: delphi-5

我有一个日志文件,我想保持小。

我有一个TDBListBox。

我通过串口输入数据流。

procedure LogIt(tStr : String);
begin
  dm.tblLogs.Edit;
  dm.tblLogs.FieldByName(fldCommands).AsString:=
    dm.tblLogs.FieldByName(fldCommands).AsString+#10+tStr;
  dm.tblLogs.Post;
end;

这是有效的,但是这个名单正在增长,我不需要超过最近十个条目。

我能想到的唯一方法是将字段数据加载到不可见的TMemo中

if Memo1.Lines.Count > 0 then
  Memo1.Lines.Delete(0);

在添加下一行之前,然后将Memo.Lines.Text传递给数据库字段。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用TStringList代替TMemo。但是,您可以在内存中维护单独的日志消息列表,然后在更新列表时仅将最新的10条消息保存到数据库中。例如:

var
  log: TStringList;

...

log := TStringList.Create;
log.Capacity := 10;

...

procedure LogIt(tStr : String);
begin
  while log.Count >= 10 then
    log.Delete(0);
  log.Add(tStr);

  dm.tblLogs.Edit;
  try
    dm.tblLogs.FieldByName(fldCommands).AsString := log.Text;
    dm.tblLogs.Post;
  except
    dm.tblLogs.Cancel;
  end;
end;