以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [讨论]_identify 的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=116288) |
-- 作者:积水成渊 -- 发布时间:2018/3/22 11:38:00 -- [讨论]_identify 的问题 做了一个窗口,窗口中表的类型为SQLtable,发现在界面上删除行时,数据库中的数据并没有删除掉,后面通过跟踪代码发现,界面上删除数据是通过_identify来删除数据库底层的数据的,但是由于界面上获取的_identify跟数据库中药删除数据的_identify不一致,导致不能将数据库底层的数据删除掉,甚至更严重的是会错误的删除数据库底层的数据,请问有什么办法可以让界面的_identify与数据库底层的_identify一致,从而实现精确的删除数据库底层的数据,由于_identify的不一致,会导致多人操作时数据保存混乱,求老师们提供一个好的解决方案 [此贴子已经被作者于2018/3/22 11:39:27编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/3/22 12:02:00 -- 1、你自己编写代码删除数据的?如果使用Tables("xxx").Save的方式保存,数据肯定是没问题的。
2、如果自己编写代码删除数据。先理解这个:新增的行_Identify是临时的,保存之后_Identify才会生出唯一的值。
你可以先保存行,再引用_Identify列的值,这样就没问题。 |
-- 作者:积水成渊 -- 发布时间:2018/3/26 15:19:00 -- 是按照先保存,然后获取_Identify的方法处理的,我发现问题所在,我在数据库表里做了触发器,触发器的功能是当表中数据发生修改或者删除数据的时候,触发器会将 修改或者删除的数据插入到另外一张表中,像这种写了触发器的表,如果获取数据库底层的_Identify
[此贴子已经被作者于2018/3/26 15:42:05编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/3/26 16:06:00 -- 你触发器处理什么情况的?更新、删除?还是新增的?
更新或者删除情况,_Identify的列肯定是正确的。请具体一点你的问题。 |
-- 作者:积水成渊 -- 发布时间:2018/3/28 10:39:00 -- 老师我的触发器的内容是这样写的: CREATE trigger [dbo].[trg_用户管理设置新增] on [dbo].[SYS_Users] for insert,delete as --新增用户数据 触发器执行新增角色管理表和表权限设置表 --select top 1 * into #inserted fr om SYS_Users --select * fr om SYS_RolePower --select * fr om SYS_TablePower --select * fr om SYS_Ribbon --将新增的用户信息新增至角色管理中 --用户信息表的角色字段保存的是用户ID,用户ID是唯一值 delete fr om SYS_RolePower where UserRole in (select UserRole fr om deleted) insert into SYS_RolePower(Unit,UserRole,[Group],_Locked,UserType,NavBar) select Unit,UserRole,[Group],0,UserType,\'\' fr om inserted where UserRole not in (select UserRole fr om SYS_RolePower) delete fr om SYS_TablePower where UserRole in (select UserRole fr om deleted) insert into SYS_TablePower(UserRole,ViewName,Visible,Edit,Options,AddRow,DelRow,LockRow,UnLockRow,Perform,_Locked,Copy,Import,Export,查询) select a.UserRole,b.ItemName,0,0,\'\',0,0,0,0,\'\',0,0,0,0,0 fr om inserted a,SYS_Ribbon b where b.[Enable] = 1 and b.Parent <> \'NavBar\' and b.[Type] = \'MenuItem\' and a.UserRole not in (select distinct UserRole fr om SYS_TablePower where UserRole is not null) order by b._SortKey asc GO |
-- 作者:有点甜 -- 发布时间:2018/3/28 11:04:00 -- 方法一:直接获取, select _Identify from inserted
方法二:使用全局变量 @@identity
方法三:使用函数 SCOPE_IDENTITY() |
-- 作者:积水成渊 -- 发布时间:2018/3/28 11:25:00 -- 感谢提供的方法,我现在去试下 |
-- 作者:积水成渊 -- 发布时间:2018/3/28 12:07:00 -- 老师,没有测试出来,可以给我讲解一下方法三如何使用吗,是这么修改的吗: 老师我的触发器的内容是这样写的:
CREATE trigger [dbo].[trg_用户管理设置新增] on [dbo].[SYS_Users] for insert,delete as --新增用户数据 触发器执行新增角色管理表和表权限设置表 --select top 1 * into #inserted fr om SYS_Users --select * fr om SYS_RolePower --select * fr om SYS_TablePower --select * fr om SYS_Ribbon --将新增的用户信息新增至角色管理中 --用户信息表的角色字段保存的是用户ID,用户ID是唯一值 delete fr om SYS_RolePower where UserRole in (select UserRole fr om deleted) insert into SYS_RolePower(Unit,UserRole,[Group],_Locked,UserType,NavBar) select Unit,UserRole,[Group],0,UserType,\'\' fr om inserted where UserRole not in (select UserRole fr om SYS_RolePower) delete fr om SYS_TablePower where UserRole in (select UserRole fr om deleted) insert into SYS_TablePower(UserRole,ViewName,Visible,Edit,Options,AddRow,DelRow,LockRow,UnLockRow,Perform,_Locked,Copy,Import,Export,查询) select a.UserRole,b.ItemName,0,0,\'\',0,0,0,0,\'\',0,0,0,0,0 fr om inserted a,SYS_Ribbon b where b.[Enable] = 1 and b.Parent <> \'NavBar\' and b.[Type] = \'MenuItem\' and a.UserRole not in (select distinct UserRole fr om SYS_TablePower where UserRole is not null) order by b._SortKey asc --新添加代码 se lect SCOPE_IDENTITY() as ID fr om inserted GO |
-- 作者:有点甜 -- 发布时间:2018/3/28 12:16:00 -- 1、你什么时候需要使用 _Identify 列的值?
2、你需要这个值做什么?你要加到哪句代码去? |
-- 作者:积水成渊 -- 发布时间:2018/3/28 12:27:00 -- 我是多人操作用户这张表,当每次新增完行点保存时需要用到数据库底层的_Identify,修改数据后,点保存的时候也需要用到_Identify |