小弟我刚学习delphi关于dataset有几个问题搞不明白,就是在一个数据集被打开以后,没有post前(如dbgrid编辑中没有保存)如何判断用户在这个数据集中进行了那些操作,比如那些记录是"新增"的,那几条又被"删除"了,我现在只知道修改可以用NEWVALUE 和 OLDVALUE 进行比较看记录的那些值被修改过,不知删除和新增的"内容"如何得到.(我想用这些东西作一个操作记录,比如新增了几条记录,记录的内容是什么,删除了几条内容,被删除的内容是什么)

解决方案 »

  1.   

    DataSet.UpdateStatus可以查出一些(问题是查不出usDeleted的), 各派生类里分别有一些TClientDataSet 里有 StatusFilter, default 是 [usModified, usInserted], 改成 [usDeleted] 就可以单看被删的TADOdataset 相关的有 RecordsetState, RecordStatus, 前提是 lock type 为 batch optimatic, 不会细控, if adods.RecordStatus = usInserted then... 问题是还是看不到被删除的, 这个可以用 DataSet.UpdateStatus代替, 取得的结果是一样的
      

  2.   

    谢谢!comanche 大哥 感谢!能不能再花点时间写详细一点写一下如果得到记录,小弟刚学习DELPHI实再是....
      

  3.   

    while not DataSet.Eof do
    begin
     if DataSet.UpdateState = usModified then
      ShowMessage('Modified');
     DataSet.Next;
    end;
    上面对所有 DataSet 通用
    ado 也用上面这个, 前提是 LockType 为 batchoptimatic,只有未提交的数据才有效,其它LockType都是直接改完提交,所以没效果ClientDataSet.StatusFilter = [usDeleted];这样,ClientDataSet就只能看到被删的记录,类似于Filter,这个只不过是对记录状态进行Filter;