有朋友问我,客户端使用了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. Scala安装配置和使用

  2. Redis 集群部署

    一.下载所需软件包 redis wget http://download.redis.io/releases/redis-4.0.6.tar.gz ruby wget https://cache.ru ...

  3. JAVA 基础编程练习题2 【程序 2 输出素数】

    2 [程序 2 输出素数] 题目:判断 101-200 之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数, ...

  4. jvm小白

    tomcat设置可被jconsole监控: 在catalina.bat或catalina.sh里面加上. set JAVA_OPTS=-Djava.rmi.server.hostname=127.0. ...

  5. vue弹窗后如何禁止滚动条滚动?

    原文地址 常见场景 在许多填写表单的页面中,都会弹出一个选择器,让你在弹窗中选择项目.有时,弹窗本身容纳不下内容,需要让它不断滚动来展示,但因为事件是冒泡的,有时就会造成底部(body 的Z-inde ...

  6. 前端面试经典题之apply与call的比较

    在讲apply和call之前,我们需要先清楚在js中,this指向的是什么. 大家可以参考一下阮一峰老师写的关于JavaScript中this的原理讲解文章:http://www.ruanyifeng ...

  7. #Java第三周总结

    第三周实验题目+总结 第一题:打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个"水仙花数 ...

  8. superset使用

    部署完成后,就可以登陆superset的web页面: http://192.168.56.105:8088  #默认是8080,在配置文件中可以修改 点database可以选择连接不同的数据源,如My ...

  9. springboot获取项目的绝对路径和根目录

    springboot获取当前项目路径的地址 System.getProperty("user.dir") 输出目录:  G:\outshine\wangsoso //获取class ...

  10. 10.hive安装

    上传hive安装包并解压 给hive设置一个软链接 给hive配置环境变量 sudo vim /etc/profile #hive export HIVE_HOME=/opt/modules/hive ...