以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何返回保存是否成功?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=27038)

--  作者:zpx_2012
--  发布时间:2012/12/20 14:24:00
--  如何返回保存是否成功?

各位老师,

 

当我在传递工作流时,根据“状态”列的是否为完成来锁定数据行,但保存时因为其他列有些数据没有填写未能保存,但此时行已经变成锁定的了,要如何判断如果没有保存成功则取消刚才锁定的行?

 

谢谢!


--  作者:lin_hailun
--  发布时间:2012/12/20 15:05:00
--  
 我想知道你的其他数据是怎么保存的,为什么没有保存成功?

--  作者:zpx_2012
--  发布时间:2012/12/20 15:28:00
--  

下面是流程传递窗口确定按钮的代码:

 

Else \'如果是最后一个流程
    CurrentTable.Current("sys_流程状态") = "已完成"
    Syscmd.Row.Lock() \'锁定此行
End If
CurrentTable.Current("sys_传递说明") = tx4.Value
CurrentTable.Current.Save() \'保存当前行
CurrentTable.Current.Remove \'移除当前行
e.Form.Close()

 

以下是表中BeforeSaveDataRow代码:

 

\'保存前检查不允许为空的列(因为下面这三项可能没填写所以就保存不了)
Dim ss() As String = {"入库单号","入库类别","仓库"}
For i As Integer = 0 To ss.Length - 1
    If e.DataRow.IsNull(ss(i))
        MessageBox.Show("\'\'" & ss(i) & "\'\'不能为空!")
        \'查找为空的字段并将焦点定位到此行
        Dim Index As Integer
        Index = Tables("入库单").FindRow(e.DataRow) \'找出此行在数据Table中的位置
        If Index > -1 Then \'如果找到此行
            Tables("入库单").Position = Index
        End If
        MainTable = Tables("入库单")
        e.Cancel = True

 CurrentTable.Current("sys_流程状态") = "待处理"
Syscmd.Row.UNLock() \'锁定此行

        Exit For
    End If
Next

 

我现在在上面加了两行红色的,这样是不是就可以实现如果保存不成功就把值改变成初始的状态?

谢谢!


--  作者:lin_hailun
--  发布时间:2012/12/20 15:38:00
--  
 嗯嗯,这样可以。不过有一种可能是,保存进数据库的时候,数据库报错,导致数据没有写入,这种情况暂时无法避免的。

 楼主先这样弄,可以满足需要的。