Foxtable(狐表)用户栏目专家坐堂 → 如何实现撤消已保存、多行修改的记录


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

主题:如何实现撤消已保存、多行修改的记录

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
如何实现撤消已保存、多行修改的记录  发帖心情 Post By:2023/3/21 20:25:00 [显示全部帖子]

Tables("入库主表").Current.DataRow.Load(False)
Tables("入库明细").Current.DataRow.Load(False)

上面代码,只对当前选中修改,未保存的记录进行撤消修改

如何实现对多行修改已保存的记录进行撤消修改?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/3/21 20:49:00 [显示全部帖子]

不是整表撤销,1楼的代码只对未保存的记录,对已保存的数据是无效,如何实现对已保存也有效,同时更新到外部数据源,确保一致?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/3/22 9:33:00 [显示全部帖子]

撤销修改

方法一:Tables("入库主表").Current.DataRow.Load(False)

方法二:
With Tables("员工")
    If .Current IsNot Nothing Then
        .Current.Reject()
    End If
End With

这二种方法,都是必须光标在修改行,撤销修改才有效,对多行记录,光标不在修改行是撤销修改无效。

问题一:如何实现多行记录,光标不在修改行撤销修改有效?
问题二:二种方法,哪种对外部数据源同步更好?试一下,好象差不多,这二种写法的区别是什么?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/3/22 12:24:00 [显示全部帖子]

With Tables("员工")
    If .Current IsNot Nothing Then
        .Current.Reject()
    End If
End With

这个之前测试一下是可以撤销修改,现在再测试变成删除记录,这个什么情况

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/3/22 14:47:00 [显示全部帖子]

模拟关联-入库主表和明细--执行-增、删除都正常
问题一:主表录入后,明细表没录入,修改主表,执行下面,无报错,无反应,有时,只有录入明细才有反应,再保存,保存事件失效,按保存无反应
Tables("入库主表").Current.DataRow.Load(False)

问题2:修改明细,执行下面,无报错,无反应,有时,删除记录
For Each r As Row In Tables("入库明细").Rows
    r.DataRow.Load(False)
Next

下面保存
Dim dr As DataRow = Tables("入库主表").current.DataRow
Dim pf As String
If dr.RowState <> DataRowState.Added Then
    Return
ElseIf dr.IsNull("制单日期") Then
    e.Cancel = True
    MessageBox.Show("必须输入日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
Else
    pf = "RK" & "" & Format(dr("制单日期"),"yyyyMM")
End If
Dim cmd1 As New SQCommand
Dim cmd2 As New SQCommand
Dim Key As Integer
cmd1.C '设置数据源名称
cmd2.C
cmd1.commandText = "Se Count(*) From [编号] Where [前缀] = '" & pf & "'"
If cmd1.ExecuteScalar = 0 Then
    cmd1.commandtext = "Insert Into 编号 (前缀, 顺序号) Values('" & pf & "',1)"
    cmd1.ExecuteNonQuery
End If
cmd1.commandText = "Sel [顺序号] From [编号] Where [前缀] = '" & pf & "'"
Do
    Key = cmd1.ExecuteScalar()
    cmd2.commandText = "Update [编号] Se [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = '" & pf & "'"
    If cmd2.ExecuteNonQuery() > 0 Then
        Exit Do
    End If
Loop
dr("入库单号") = pf & "-" & Format(Key,"0000")   '流水号的设计)



Dim r As Row = Tables("入库主表").current

r("保存状态") = True
DataTables("入库主表").Save()
DataTables("入库明细").Save()
MessageBox.Show("保存成功!")

如果是新增行还没有保存过,撤销当然是连新增这个动作也撤销了,
已保存的数据是没有办法撤销的
把我整不会

需求,("保存状态") = True,可以实现未保存的主表或明细的修改的撤销,这个怎么实现?




 回到顶部