Foxtable(狐表)用户栏目专家坐堂 → 新增行键值的确定?


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

主题:新增行键值的确定?

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
新增行键值的确定?  发帖心情 Post By:2018/6/1 10:47:00 [只看该作者]

如题,新增一行,在“beforeSaveDaterow”事件中,需要确定其"_Identify",以便将该行日志通过键值关联写到日志表。
但经研究,该值未真正保存时是虚值,多人操作情况下容易造成冲突,请问处理这种情况?

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


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

新增一行的时候,马上保存。

 

beforeSaveDataRow事件判断行状态,如果是新增行(不处理),如果不是新增行,就出你的逻辑处理。


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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2018/6/1 11:28:00 [只看该作者]

这样子的话,适用性不强,部分表格列值是有约束的,默认空值,必须填入才能保存,还有一些必须填入规范数据才能保存。怎么才能确保新增一行,整行数据写入日志,不发生错位呢?
[此贴子已经被作者于2018/6/1 11:31:19编辑过]

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


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

以下是引用luodang2050在2018/6/1 11:28:00的发言:
这样子的话,适用性不强,部分表格列值是有约束的,默认空值,必须填入才能保存,还有一些必须填入规范数据才能保存。怎么才能确保新增一行,整行数据写入日志,不发生错位呢?
[此贴子已经被作者于2018/6/1 11:31:19编辑过]

 

方法一:可以在数据库里面编写【触发器】,当新增数据、修改数据的时候,写入日志;

 

方法二:beforeSaveDataRow事件,写代码处理,合成sql语句,直接insert into 或者 update 新增、插入数据,最后写 e.cancel = true 即可。


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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2018/6/1 12:19:00 [只看该作者]

方法一:触发器维护起来应该有点麻烦,而且不好记录操作者及客户端信息。
方法二:直接sql新增行,这个主键值怎么获取?没有主键值日志依然没法维护
[此贴子已经被作者于2018/6/1 12:22:10编辑过]

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


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


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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2018/6/1 16:35:00 [只看该作者]

这个可行,谢谢,现又出现如下问题
datatable表有5行数据,其中2行为刚新增的行,通过sql后台方式直接更新了,现需要将后台更新的两行数据替换到新增的2行。
因事件必须写在全局事件“BeforeSaveDataRow”,只能一行一行更新,代码应该怎么写,让新增的2行看起来像直接保存的一样?

现目前的做法为先移除新增行,再追载对应行,但追载时的保存参数如设置为false,则后面行数据会丢失,如设为true,则会因重复保存造成死循环。
edr.Remove
edr = edt.AppendLoad("_Identify=" & id0,False)(0)
[此贴子已经被作者于2018/6/1 16:48:42编辑过]

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


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

这个没办法。那就不能整体处理吧。

 

在save之前记录行信息,在你save之后,读取行信息,写日志。


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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2018/6/1 18:32:00 [只看该作者]

终于研究了处理方案了,谢谢版主提醒的思路,不过感觉这样用户体验还是差了,看来还是需要自定义网络编号,进行数据处理更加可靠,目前不知推荐哪种网络编号方案更稳定可靠?
1、全局事件“BeforeSaveDataRow”(标志行错误,且虚拟保存)
Dim cmd0 As new SQLCommand
cmd0.ConnectionName = edt.ConnectionName
cmd0.CommandText = "Insert Into " & sqltn & "(" & cns0 & ") Values (" & vals0 & ")" & ";Select @@IDENTITY"
Dim id0 As Integer  = cmd0.ExecuteScalar  '插入后提取键值,便于下一步操作
Functions.Execute("表审计日志新增",sqltn,id0,"行新增",log,当前时间)
edr.SetError("_Identify",id0)
edr.Accept  
2、全局事件“PrepareEdit”(查找所有标志错误行,进行批量刷新)
            If er.DataRow.GetError("_Identify") <> ""  '处理新增行异常
                Dim ids As String = ""
                Dim ids0 As String = ""
                For Each r As Row In  etb.Rows
                    If r.DataRow.GetError("_Identify") <> ""
                        ids0 &= "," & r("_Identify")
                        ids &= "," & r.DataRow.GetError("_Identify")
                    End If
                Next
                If ids <> ""
                    ids = ids.TrimStart(",")
                    ids0 = ids0.TrimStart(",")
                    'msgbox(ids)
                End If
                etb.StopRedraw
                etb.DataTable.RemoveFor("_Identify in (" & ids0 & ")")
                etb.DataTable.AppendLoad("_Identify in (" & ids & ")")
                etb.ResumeRedraw
                Return Nothing
            End If  

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/1 20:00:00 [只看该作者]


 回到顶部