有朋友问我,客户端使用了kbmMWClientQuery,对其进行了编辑后,对于指定的记录,如何判断是否是增加的记录,或者是被修改后的记录?

下面这个函数,返回aDataSet当前记录的修改状态:

function TForm5.GetUpdateStatus(aDataSet: TkbmMWCustomClientQuery): TUpdateStatus;
var
i: TkbmNativeInt;
pRec, pOrigRec, pOldRec: PkbmRecord;
st: TUpdateStatus;
aOldV, aNewV: Variant;
IsFieldValueChanged:Boolean;
begin pRec := pkbmRecord(aDataSet.ActiveBuffer);
if pRec = nil then
Exit;
pOrigRec:=pRec;
while pOrigRec^.PrevRecordVersion <> nil do
begin
pOrigRec := pOrigRec^.PrevRecordVersion;
end; if pRec^.UpdateStatus = usDeleted then
begin
if pOrigRec^.UpdateStatus = usInserted then
st := usUnmodified; //增加的记录又删除记为usUnmodified.
end
else if pOrigRec^.UpdateStatus = usInserted then
st := usInserted
else
st := pRec^.UpdateStatus; if st = usModified then
with aDataSet do
begin
IsFieldValueChanged:=False;
pOldRec := OverrideActiveRecordBuffer;
try
for i := to FieldCount - do
begin
OverrideActiveRecordBuffer := pRec; // 指向修改后的数据
aNewV := FieldByName(Fields[i].FieldName).Value;
OverrideActiveRecordBuffer := pOrigRec; // 指向修改前的数据
aOldV := FieldByName(Fields[i].FieldName).Value;
if aNewV <> aOldV then
begin
IsFieldValueChanged:=True;
Break;
end;
end;
if not IsFieldValueChanged then
st:= usUnmodified;
finally
OverrideActiveRecordBuffer := pOldRec;
end;
end;
result:=st; end;

这是测试代码:

procedure TForm5.Button3Click(Sender: TObject);
var
st:TUpdateStatus;
begin st:= GetUpdateStatus(m); if st = TUpdateStatus.usModified then
Memo1.Lines.Add(' usModified ' + ' RecordID=' + m.RecordID.ToString)
else if st = TUpdateStatus.usInserted then
Memo1.Lines.Add(' usInserted' + ' RecordID=' + m.RecordID.ToString)
else if st = TUpdateStatus.usDeleted then
Memo1.Lines.Add(' usDeleted' + ' RecordID=' + m.RecordID.ToString)
else if st = TUpdateStatus.usUnmodified then
Memo1.Lines.Add(' usUnmodified' + ' RecordID=' + m.RecordID.ToString); end;

参考: http://blog.sina.com.cn/s/blog_44fa172f0102wmsg.html

注意:只适用于kbmMWClientQuery,不适用于kbmMemTable。

如何判断kbmMWClientQuery当前记录的增改状态?的更多相关文章

  1. mysql数据库、表、字段、记录:增、删、改、查

    /* 结构:数据库.表.字段.记录 操作:增删改查 */ -- 1.数据库:增删改查 create datebase if not exists jkxy; drop database if exis ...

  2. js 属性增改删操作

    js 属性增改删操作,可参看菜鸟教程,这里记录一个小问题:disabled属性 使用setAttribute操作无法 禁用disabled属性,需使用removeAttribute操作,原因是只要有d ...

  3. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  4. mysql对库,表及记录的增删改查

    破解密码 #1.关闭mysqlnet stop mysqlmysql还在运行时需要输入命令关闭,也可以手动去服务关闭 #2.重新启动mysqld --skip-grant-tables跳过权限 #3m ...

  5. 测试开发【提测平台】分享10-Element UI抽屉和表单校验&增改接口合并实现应用管理

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 开篇说个小讨论,一个群里聊天聊到关于更新篇章的长度,是小篇幅多次,还是每次按照一个小完整的功能,我个人的是按照后种来的,主要的思考就是希望 ...

  6. XML简单的增改删操作

    XML文件的简单增改删,每一个都可以单独拿出来使用. 新创建XML文件,<?xmlversion="1.0"encoding="utf-8"?> & ...

  7. 如何判断一条记录什么字段被修改了 [问题点数:40分,结帖人bluesukeke]

    查询出来数据,在数据集编辑状态下,如何判断一条记录被修改了,哪些字段被修改了. 可用adoquery的Delta屬性...eg: ClientDataSet1.Delta... PS:POST前是準確 ...

  8. mysql语句判断是否存在记录,没有则插入新纪录否则不执行

    1 前言 由于项目需要,当某个表如果有记录,就不执行加入语句,否则加入新纪录(测试数据).思路是:判断表的记录是否为空,然后再决定是否插入 2 代码 DROP PROCEDURE IF EXISTS ...

  9. DataFrame查增改删

    DataFrame查增改删 查 Read 类list/ndarray数据访问方式 dates = pd.date_range(',periods=10) dates df = pd.DataFrame ...

随机推荐

  1. C语言中函数strcpy ,strncpy ,strlcpy的用法

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  2. 深度学习之NLP获取词向量

    1.代码 def clean_text(text, remove_stopwords=False): """ 数据清洗 """ text = ...

  3. mybaits及mybaits generator 插件使用指南(亲测原创)

    一. eclips安装mybaits插件 参考文章:http://www.cnblogs.com/zengsong-restService/archive/2013/08/09/3248245.htm ...

  4. CentOS 7系统配置上的变化

    http://www.linuxidc.com/Linux/2014-09/107375p4.htm CentOS 7系统配置上的变化解析 ip ss指令替代 ifconfig route arp n ...

  5. 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析

    笔记 3.高级篇幅之Zuul常用问题分析和网关过滤器原理分析 简介:讲解Zuul网关原理和过滤器生命周期,           1.路由名称定义问题         路由映射重复覆盖问题        ...

  6. JavaScript(4)——CSS选择的艺术

    CSS选择的艺术 常用常见的选择器: 类选择器[ .class ],id选择器[ #id ],全局选择器[ * ],元素选择器[ element ] 根据层次关系定位: (1) element, el ...

  7. DS18b20温度传感器基础使用

    认识管脚 认识唯一标示的64位地址序列号 寄存器数据译码成温度值(下面只针对12位转化的,还有9..10等其他位的转化方式,不同位的转化,其精度也不同) 传感器存储器 配置寄存器使用说明 DS18b2 ...

  8. 【Web】如何注释?

    HTML 形式:<!-- 注释内容 --> 实例: <!-- <p>这是第一段</p> --> CSS 形式:/* 注释内容 */ 实例: /* 选中i ...

  9. React中this指向常用的2种修正方式

    一.使用bind方法(构造函数内绑定) <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  10. 潜在语义分析 LSA

    简单介绍 LSA和传统向量空间模型(vector space model)一样使用向量来表示词(terms)和文档(documents),并通过向量间的关系(如夹角)来判断词及文档间的关系:不同的是, ...