Foxtable(狐表)用户栏目专家坐堂 → [讨论]_identify 的问题


  共有2942人关注过本帖树形打印复制链接

主题:[讨论]_identify 的问题

帅哥哟,离线,有人找我吗?
积水成渊
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
[讨论]_identify 的问题  发帖心情 Post By:2018/3/22 11:38:00 [只看该作者]

做了一个窗口,窗口中表的类型为SQLtable,发现在界面上删除行时,数据库中的数据并没有删除掉,后面通过跟踪代码发现,界面上删除数据是通过_identify来删除数据库底层的数据的,但是由于界面上获取的_identify跟数据库中药删除数据的_identify不一致,导致不能将数据库底层的数据删除掉,甚至更严重的是会错误的删除数据库底层的数据,请问有什么办法可以让界面的_identify与数据库底层的_identify一致,从而实现精确的删除数据库底层的数据,由于_identify的不一致,会导致多人操作时数据保存混乱,求老师们提供一个好的解决方案
[此贴子已经被作者于2018/3/22 11:39:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/22 12:02:00 [只看该作者]

1、你自己编写代码删除数据的?如果使用Tables("xxx").Save的方式保存,数据肯定是没问题的。

 

2、如果自己编写代码删除数据。先理解这个:新增的行_Identify是临时的,保存之后_Identify才会生出唯一的值。

 

    你可以先保存行,再引用_Identify列的值,这样就没问题。


 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/3/26 15:19:00 [只看该作者]

是按照先保存,然后获取_Identify的方法处理的,我发现问题所在,我在数据库表里做了触发器,触发器的功能是当表中数据发生修改或者删除数据的时候,触发器会将
修改或者删除的数据插入到另外一张表中,像这种写了触发器的表,如果获取数据库底层的_Identify
[此贴子已经被作者于2018/3/26 15:42:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/26 16:06:00 [只看该作者]

你触发器处理什么情况的?更新、删除?还是新增的?

 

更新或者删除情况,_Identify的列肯定是正确的。请具体一点你的问题。


 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/28 11:04:00 [只看该作者]

方法一:直接获取, select _Identify from inserted

 

方法二:使用全局变量 @@identity

 

方法三:使用函数 SCOPE_IDENTITY()


 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/3/28 11:25:00 [只看该作者]

感谢提供的方法,我现在去试下

 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/28 12:16:00 [只看该作者]

1、你什么时候需要使用 _Identify 列的值?

 

2、你需要这个值做什么?你要加到哪句代码去?


 回到顶部
帅哥哟,离线,有人找我吗?
积水成渊
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:348 积分:2805 威望:0 精华:0 注册:2016/8/24 10:39:00
  发帖心情 Post By:2018/3/28 12:27:00 [只看该作者]

我是多人操作用户这张表,当每次新增完行点保存时需要用到数据库底层的_Identify,修改数据后,点保存的时候也需要用到_Identify

 回到顶部
总数 11 1 2 下一页