问题-"Record not found or changed by another user"
回答1:===============================================================
问题:clientdataset“Record not found or changed by another user”
unable to find record no key specified
原因:
Clientdataset提交数据时服务器端比对提交数据Delta中的原始数据,如果比对数据不符则报告上述错误,一般发生在插入操作后更新,对于单表发生错误原因如下:
1 数据库有自增长字段.测试发现ADO可以在插入数据后自动刷新自增长字段值,在afterupdaterecord事件中加入下面语句可以在更新后同步刷新clientdataset
if (updatekind=ukinsert) then begin
deltads.FieldByName('id').ReadOnly:=false;
deltads.FieldByName('id').NewValue:=qry1ID.Value;
end;
resolvetodataset必须为true才行.详细说明见流水号产生一文.DbExpress测试发现无法刷新自增长字段,所以建议在数据库中不要随意使用自增长字段,很多人使用自增长字段只是为了做关键字,从数据库设计的原理上看,这样的做法是对簇索引的极大浪费.
2 数据库字段有Default值,但是ADO和DBexpress更新数据后都无法刷新default值,所以解决方法是不用数据库的default值,或客户端添加数据时自动赋值.
3 关键字中有浮点数,日期类(Delphi处理为浮点数)字段,测试发现在Access上面如果使用这些字段,会因为Delphi自身的误差导致无法按照关键字检索到数据,解决方法是用序号或者流水号作为关键字.
4 params造成的数据"消失".很多系统一打开窗口不是查询表所有的数据,而是默认查询当天或者指定查询条件的数据,一般在数据集中设定好Param来配合查询,这时问题就出现了,比如我查询的是当天的业务数据,可以我录入的时候日期是昨天的,在C/S架构中,数据保存后依然在数据集中存在,ado不会因为刷新而使新添加的数据消失.但在midas架构中则有所不同,Clientdataset提交数据后,数据正常插入,Clientdataset中数据也不会因为不满足查询条件而自动消失.但马上提交修改时,privoder接收到修改数据,会自动去关连的ado中查询数据是否存在,此时会出现查询不到数据的情况,报告题目中的错误,我猜测是服务器端没有为客户端保存任何数据和连接,Insert成功后,ado数据集马上被关闭了,下次更新数据时,再根据param打开ado查询,此时就会发生上述错误了.
我的解决方法是Clientdataset.afterapplyupdate中判断更新的数据集是否复核查询条件,如果不满足,则自动扩展查询条件,自动查询一次,这样就不会出现上述错误.
另外,在子母表中,我还没有找到什么方法可以刷新自增长字段和Default字段的方法,因为子表是整个数据集作为一个字段传输的,如果谁有方法和刷新子表字段请通知我一声.
回答2:===============================================================
问题-"Record not found or changed by another user"的更多相关文章
- 比特币_Bitcoin 简介
2008-11 Satoshi Nakamoto Bitcoin: A Peer-to-Peer Electronic Cash System http://p2pbucks.com/?p=99 ...
- RFC-RTSP
Network Working Group H. Schulzrinne Request for Comments: 2326 Columbia U. Category: Standards Trac ...
- Roo中的@Version
首页 关于 Roo中的@Version 发表回复 问题提出 当我们为entity添加@RooJpaActiveRecord注解时,Roo为我们自动生成了一个名为Entity_Roo_Jpa_Entit ...
- 常用sql commands以及mysql问题解决日志
mysql workbench常用命令快捷键 ctrl+T ->创建新的sql query tab ctrl+shift+enter->执行当前的sql命令 https://dev.mys ...
- Bitcoin: A Peer-to-Peer Electronic Cash System
Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto October 31, 2008 Abstract A purely p ...
- Ext grid单元格编辑时获取获取Ext.grid.column.Column
item2.width = 80; //item2.flex = 1; item2.align = 'center'; item2.menuDisabled = true; //禁止显示列头部右侧菜单 ...
- mysql数据库变更监控(canal)
背景: 1. 一些项目的基础功能会有Audit Trace, 以记录系统用户所做过的所有记录. 2. 实时备份数据,比如mysql主从复制,一个用于面向应用,一个用于对应用数据库的实时备份. 3. 实 ...
- RTSP Spectification
Refer: https://www.ietf.org/rfc/rfc2326.txt Network Working Group H. SchulzrinneRequest for Comments ...
- If one session has a shared or exclusive lock on record R in an index, another session cannot insert
If one session has a shared or exclusive lock on record R in an index, another session cannot insert ...
随机推荐
- range([start], stop[, step]):产生一个序列,默认从0开始
range([start], stop[, step]):产生一个序列,默认从0开始 >>> l = range(10) >>> l [0, 1, 2, 3, 4, ...
- [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】
题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...
- Codeforces Round #211 (Div. 2)
难得一次比赛能够自己成功A掉四个题: A题:水题,模拟一下就行: #include <iostream> #include <cstdio> using namespace s ...
- 李洪强漫谈iOS开发[C语言-023]-取余数运算符
- edx 配置smtp发送邮件
参考文章:https://github.com/CDOT-EDX/ProductionStackDocs/wiki/Enable-SMTP-for-EDX-(Production-Stack) 具体到 ...
- USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制
USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...
- SQL Server系统表和常用函数(转)
sysaltfiles 主数据库 保存数据库的文件 syscharsets 主数据库 字符集与排序顺序sysconfigures 主数据库 配置选项syscurconfigs 主数据库 当前配置选项s ...
- linux 内核驱动--Platform Device和Platform_driver注册过程
linux 内核驱动--Platform Device和Platform_driver注册过程 从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Pla ...
- mac 软件安装
[Mac]PS CC 软件下载及破解的详细方法 为github帐号添加SSH keys 在mac下,打开文件都是“Smart Adobe CC Blocker v1.0”已损坏,打不开 brew ma ...
- apache开源项目--kafka
kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常普通的 ...