ADOQuery1中的sql语句是:
ls_sql:='select * from tbText';
在一个定时器中写了以下语句向服务器查询记录变化:
ADOQuery1.ReQuery;
如发现有新增记录,则将新增记录的某个文本字段显示在一个Memo中。
现在的问题是,ADOQuery能否确定那条记录是最后增加的(即定时器上次未查询到的记录)?
ls_sql:='select * from tbText';
在一个定时器中写了以下语句向服务器查询记录变化:
ADOQuery1.ReQuery;
如发现有新增记录,则将新增记录的某个文本字段显示在一个Memo中。
现在的问题是,ADOQuery能否确定那条记录是最后增加的(即定时器上次未查询到的记录)?
1、设置一个全局变量
2、先将此表中的最后一条记录的关键字传给全局变量
3、在定时器中:
3.0查询大于全局变量的记录
3.1如果记录不为空,添加字段到Memo1中.记录为空将转到3.3执行
3.2将这个最后一条记录的关键字传给全局变量
3.3循环3.0
而且,在定时器刷新期间可能新增若干条记录。
当然有一种间接办法,就是在Requery把记录添加至memo后,将所有记录标志改为“原来”,但这样记录多时,定时器定时到服务器取记录肯定会影响效率
期待更好的办法
我再试试
SourceDS: TDataSet; DeltaDS: TClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
begin // 如果客户程序插入信息记录同时未设定主键,
// 从主窗口获取唯一的记录主键(发送时间和当日记录序号)
if (UpdateKind = ukInsert) and (DeltaDS.FieldByName('NUM').Asinteger <= 0) then
begin
DeltaDS.Edit;
DeltaDS.FieldByName('NUM').AsInteger := ServerMainForm.RecNumber;
DeltaDS.FieldByName('SENDDATE').AsDateTime := ServerMainForm.SendDate;
end;
end;那么这个空主键的代码绝对是新增记录,应该和楼主的要求类似,如果楼主不是3层的,可以在触发器处理也是一样的,供楼主借鉴。
===
这样不太合适,因为在ReQuery之前还有可能删除了某些记录。