以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]请问用这种情况会出现保存不上吗?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=147302)

--  作者:智友软件工作室
--  发布时间:2020/3/13 15:31:00
--  [求助]请问用这种情况会出现保存不上吗?
 作为服务端使用的:
       Dim gd As DataRow = DataTables("维修工单").SQLFind("工单编号 = \'" & gdbh & "\'")
        \'开始写入数据
        gd("处理状态") = "等待确认"
        Dim d As Date = Date.Now()
        gd("操作日志") = name & "于" & CStr(d.Month) & "/" & CStr(d.Day) & " " & CStr(d.Hour) & ":" & CStr(d.Minute) & ":申请验收(完)" & vbcrlf & gd("操作日志")
        gd.Save()

一直是没有问题,今天突然用户反馈有操作后不执行保存的情况,我测试后也确实存在,但是没有任何报错,我关闭服务器客户端,在打开后就又好了

请问这是什么情况呢?

--  作者:有点蓝
--  发布时间:2020/3/13 15:44:00
--  
这个保存肯定没有问题,但是注意,不能保存第二次,比如下面第二次赋值和保存是没有用的

       Dim gd As DataRow = DataTables("维修工单").SQLFind("工单编号 = \'" & gdbh & "\'")
        \'开始写入数据
        gd("处理状态") = "等待确认"
        Dim d As Date = Date.Now()
        gd("操作日志") = name & "于" & CStr(d.Month) & "/" & CStr(d.Day) & " " & CStr(d.Hour) & ":" & CStr(d.Minute) & ":申请验收(完)" & vbcrlf & gd("操作日志")
        gd.Save()
        gd("某列") = "某值"
gd.Save()

另外可以使用日志跟踪一下服务端的错误

--  作者:智友软件工作室
--  发布时间:2020/3/13 16:02:00
--  
是啊,我看了日志是没有任何错误的,而且一直是运行没有问题,就是今天发现的,一共两处都是类似上述的保存方式,两处都是异常(不保存),其他的API接口也都是运行正常,我重启软件之后,保存还是正常的。
--  作者:有点蓝
--  发布时间:2020/3/13 16:24:00
--  
是不是没有查询到数据,比如这个工单编号还没有保存,SQLFind查询没有结果
--  作者:智友软件工作室
--  发布时间:2020/3/13 23:09:00
--  
我有发现类似的保存不上的情况:也是类似的

        \'e.WriteString(e.PlainText)
        \'Return Nothing
        Dim jopost As JObject = JObject.Parse(e.PlainText)
        Dim gdbh As String = jopost("gdbh")
        Dim gcsunionid As String = jopost("gcsunionid")
        Dim yonghuunionid As String = jopost("unionid")
        Dim yonghuopenid As String = jopost("openid")
        Dim jo As New JObject
        \'工程师判断
        Dim yg As DataRow = DataTables("员工资料").SQLFind("员工类型 = \'工程师\' and uni")
        If yg IsNot Nothing Then
            If yg("移动办公") <> "允许登录" Then
                jo = New JObject
                jo("no") = New JObject
                jo("no")("title") = "工程师已被禁止使用移动端"
                e.WriteString(CompressJson(jo))
                Return Nothing
            End If
        Else
            jo = New JObject
            jo("no") = New JObject
            jo("no")("title") = "工程师已被禁用"
            e.WriteString(CompressJson(jo))
            Return Nothing
        End If
        \'工单判断
        Dim name As String = yg("员工姓名")
        Dim gd As DataRow = DataTables("维修工单").SQLFind("工单编号 = \'" & gdbh & "\'")
        If gd IsNot Nothing Then
            If gd("处理状态") <> "正在处理" Then
                \'处理状态错误
                jo = New JObject
                jo("no") = New JObject
                jo("no")("title") = "处理状态不是正在处理"
                e.WriteString(CompressJson(jo))
                Return Nothing
            End If
            If gd("工程师") <> name Then
                \'工程师不对
                jo = New JObject
                jo("no") = New JObject
                jo("no")("title") = "此单不属于这个工程师"
                e.WriteString(CompressJson(jo))
                Return Nothing
            End If
            \'If gd("unionid") <> "" Then
            \'    \'已绑定
            \'    jo = New JObject
            \'    jo("no") = New JObject
            \'    jo("no")("title") = "此单已绑定过了"
            \'    e.WriteString(CompressJson(jo))
            \'    Return Nothing
            \'End If
        Else
            \'单号不存在
            jo = New JObject
            jo("no") = New JObject
            jo("no")("title") = "工单编号不存在"
            e.WriteString(CompressJson(jo))
            Return Nothing
        End If
        \'绑定
        gd("unionid") = yonghuunionid
        gd("xcx_openid") = yonghuopenid
        gd.Save()
        \'返回成功
        jo("no") = New JObject \'这个要加上返回一个空值便于后面判断
        jo("no") = "" \'这个空千万不能省略
        
        jo("yes") = New JObject
        e.WriteString(CompressJson(jo))

--  作者:有点蓝
--  发布时间:2020/3/14 8:46:00
--  
这种这么多逻辑判断,随便一个不符合条件return了,就不会保存了。