有朋友问我,客户端使用了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. Selenium 2自动化测试实战39(Page Object设计模式)

    Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码 ...

  2. office web apps安装部署,配置https,负载均衡(一)背景介绍

    Office Web Apps,简称owa,是微软开发的在线预览office 文件服务.只要是做web开发技术的技术人员都知道,office文件预览,对于网站来说,绝对是一个难点,目前常见的预览off ...

  3. python基础知识(属性property)

    属性property property               !=          类属性和实例属性 访问计算后所得的值           返回所存储的值 创建用于计算的属性 @proper ...

  4. Linux服务器上安装openoffice,以及安装字体文件

    1.安装openoffice (1)将openoffice的linux安装包放到linux指定的文件下(一般放在opt下) (2)在安装包的目录下执行命令:tar -zxvf 对应的压缩包名字 (3) ...

  5. 【FFMPEG】使用ffmpeg类库打开流媒体

    版权声明:本文为博主原创文章,未经博主允许不得转载. 使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数是avformat_open_input(). 其中打开网络流的话,前面要加上函 ...

  6. ThinkPHP 使用 SwaggerUi 自动生成 api 文档

    1.下载swagger-ui GitHub地址:https://github.com/swagger-api/swagger-ui 2.修改 ThinkPHP 的 build.php ,执行命令生成需 ...

  7. idea连接docker实现一键部署

    一.修改配置文件,打开2375端口 [root@microservice ~]# vim /usr/lib/systemd/system/docker.service 在ExecStart=/usr/ ...

  8. lua调用shell 脚本

    Lua中,os.execute可以执行dos命令,但是返回的是系统状态码,默认输出.io.popen()也可以执行dos命令,但是返回一个文件.eg: 复制代码 代码如下: local t = io. ...

  9. 判断屏幕宽度px大小鉴别是移动设备或者PC

    if(window.matchMedia("(max-width: 767px)").matches){ alert("这是一个移动设备.");}else { ...

  10. csv文件的读取写法 from Udacity

    长版本 import unicodecsv enrollments_filename = 'C:\\Users\\xxxxx\\Desktop\\try.csv' enrollments = [] f ...