壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1655|回复: 12

[二次开发] FRM-40657: Record changed or deleted by another user

  [复制链接]
发表于 2011/10/13 21:41:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
EBS:11.5.10,  FORM:6I
做了个只有一个表,新创建一笔记录后保存,不关掉FORM直接修改这笔记录时,提示:
FRM-40657: Record changed or deleted by another user

向各位大虾们请教下要从哪些方面找出这问题,谢谢。

点评

这个我是查资料看到的,不一定管用。  发表于 2011/10/13 22:25
基于视图的FORM, 修改on-lock trigger,把你加的那个列加进去就OK了。  发表于 2011/10/13 22:24
 楼主| 发表于 2011/10/13 22:33:28 | 显示全部楼层
我这小鱼把四海这大虾引来啦,四海对我们这班鱼很用心,感谢。

这是基于表的FORM,表存的都是ID,界面上的基本都是非数据库项,有想到在写ON-LOCK时,只写FORM看到的ITEM,不知道这个有没有用。要试下才行了。
发表于 2011/10/13 23:10:32 | 显示全部楼层
当你插入一条记录的时候,Oracle会把他锁住,所以你就要在on-lock触发器里判断,他是否和原来的数据一样。如果一样的话就返回。
 楼主| 发表于 2011/10/13 23:21:31 | 显示全部楼层
red_code 发表于 2011/10/13 23:10
当你插入一条记录的时候,Oracle会把他锁住,所以你就要在on-lock触发器里判断,他是否和原来的数据一样。如 ...

请问怎么判断和返回,能否给个例子,谢谢。
发表于 2011/10/13 23:26:26 | 显示全部楼层
1在数据块里面建立一个row_id项,然后插入的时候把这条记录的rowid赋给row_id项
2在on-lock的时候就根据那个row_id来比较
 楼主| 发表于 2011/10/13 23:44:43 | 显示全部楼层
我就是用ROW_ID作为ON-LOCK的查询条件的,我想是在写这个ON-LOCK时有问题造成,明天再查查。
发表于 2011/10/13 23:58:12 | 显示全部楼层
on-lock 大概是这样写的吗

declare
  --判断记录是否相同的游标
  cursor c_row is
    select *
      from your_table
     where rowid = :your_block.row_id
       for update of table_id nowait;
  rec c_row%rowtype;
begin
  -- 循环块的记录
  loop
    begin
      open c_row;
      fetch c_row
        into rec;
      -- 如没数据,抛异常
      if (c_row%notfound)
      then
        close c_row;
        raise form_trigger_failure;
      end if;
      close c_row;
      --你的条件,块数据与rec记录的对比,如果相同就返回
      if 1 = 1
      then
        return;
      else
        raise form_trigger_failure;
      end if;
    exception
      when others then
        null;
    end;
  end loop;
end;
发表于 2011/10/14 14:17:58 | 显示全部楼层
他这个错误,是别人正在操作此记录,单单一个人使用此记录,很难被LOCK的

你们可以自己试一下,新建,保存,修改,会不会出现这种提示
发表于 2011/10/14 16:56:56 | 显示全部楼层
点烟看聊 发表于 2011/10/14 14:17
他这个错误,是别人正在操作此记录,单单一个人使用此记录,很难被LOCK的

你们可以自己试一下,新建,保存,修 ...

自己手动插入完记录的时候也会锁住的,我觉得这应该是Oracle的机制吧。
发表于 2011/10/14 21:43:32 | 显示全部楼层
是有这个机制,但是和上面那个无关
 楼主| 发表于 2011/10/17 20:33:40 | 显示全部楼层
点烟看聊 发表于 2011/10/14 14:17
他这个错误,是别人正在操作此记录,单单一个人使用此记录,很难被LOCK的

你们可以自己试一下,新建,保存,修 ...

这位没看清楚我的提问,我正是:新建->保存->修改 的时候出现这个问题的。

 楼主| 发表于 2011/10/17 20:38:32 | 显示全部楼层
后来作了DEBUG,原来是在写ON-LOCK的SQL:SELECT *** FROM *** WHERE ROWID = :BLOCK.ROW_ID 有问题,
新建->保存,这个时候:BLOCK.ROW_ID居然没有值,所以ON-LOCK不能锁住这笔新建记录,才会报:FRM-40657。

由于我的FORM是基于表,ON-INSERT、IN-UPDATE、ON-DELETE、ON-LOCK可以不写,后来我就干脆把这几个BLOCK TRIGGER删掉,
没事啦{:soso_e151:}

谢谢大伙的热心回贴
发表于 2011/10/18 08:19:35 | 显示全部楼层
.........无语中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 04:03 , Processed in 0.020170 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表