以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据偶尔会丢失  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=75146)

--  作者:blackzhu
--  发布时间:2015/9/28 16:39:00
--  数据偶尔会丢失
 很奇怪,有用户反应我的代码在保存时会有数据丢失.

保存代码是这样的:

 Dim Filter As String  \'定义筛选
        For Each dc As Col In Tables("付款主表.付款录入").Cols \'遍历表的所有列
            Select Case dc.Name
                Case "平台公司","报表编号","合同金额","合同编号","是否签署合同"
                Case Else
                    If Filter > "" Then
                        Filter  = Filter & "  And "
                    End If
                    Filter = Filter  & "[" & dc.Name & "] Is Null"
            End Select
        Next
        Tables("付款主表.付款录入").DataTable.DeleteFor(Filter)
        Functions.Execute("多选目录树","付款录入","付款主表","应付会计,当前状态,报表编号","当前状态|应付会计|报表编号")
        Dim r1 As Row = Tables("付款主表").Current
        If r1 IsNot Nothing
            If r1.IsNull("平台公司") Or r1.IsNull("成本类型") Then
                MessageBox.Show("平台公司和成本类型必须输入","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                Return Nothing
            End If
        End If
        If  Tables("付款主表.付款录入").Rows.Count = 0 Then
            MessageBox.Show("请输入明细数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
            Return Nothing
        End If
        For Each r As Row In Tables("付款主表.付款录入").Rows
            For Each cl As Col In Tables("付款主表.付款录入").Cols
                Select Case cl.Name
                    Case "平台公司","供应商","成本中心代码","付款金额","银行账号","流程类型","流程编号"
                        If r.IsNull(cl.Name) Then
                            MessageBox.Show(cl.Name & "请填写完整!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                            Return Nothing
                        End If
                End Select
            Next
        Next
        If Tables("付款录入").DataTable.HasChanges Or  Tables("付款主表").DataTable.HasChanges Then
            Tables("付款录入").DataTable.Save
            Tables("付款主表").DataTable.Save
            MessageBox.Show("数据保存成功","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
        Functions.Execute("多选目录树","付款录入","付款主表","应付会计,当前状态,报表编号","当前状态|应付会计|报表编号")



多选目录树的函数代码是这样的:

Dim frmName As Object = Args(0) \'e事件
Dim TableName As String  = Args(1) \'表名
Dim Cols As String = Args(2) \'列名
Dim ColName As String = Args(3)
Dim cmd As New SQL  Command
Dim dt As DataTable
cmd.Conn ecti
cmd.Com mandText = "SEL  ECT DISTINCT " & Cols & " Fro  m {" & TableName & "}"
dt = cmd.ExecuteReader()
Dim Cmb_FilterCol As WinForm.CheckedComboBox = Forms(frmName).Controls("Cmb_FilterCol")
Dim Values() As String = Args(2).Split(",")
Cmb_FilterCol.Items.Clear
For i As Integer = 0 To Values.Length -1
    Cmb_FilterCol.Items.Add(Values(i))
Next
Cmb_FilterCol.Value = ""
Cmb_FilterCol.Value = ColName


生成目录树的代码是这样的:

\'此函数用于更新主窗口左侧的Treeview控件
Dim TvwCtl As WinForm.TreeView = Args(0)   \'要更新的Treeview控件
Dim TableName As String = Args(1)
Dim FrmName As String = Args(2)



Dim Val As Integer
Dim MyFilter As String
Dim dr As DataRow = DataTables("查询参数设置").SqlFind("单据名称=\'" & FrmName & "\'")
If dr IsNot Nothing Then
    Val = dr("查询月数")
End If

Dim str As String
Dim lr As DataRow = DataTables("功能导航").SqlFind("模块名称=\'" & FrmName & "\'")
If lr IsNot Nothing Then
    Dim nms As New List(of String)
    If lr IsNot Nothing AndAlso lr.IsNull("查询角色") = False
        nms.AddRange(lr("查询角色").Split(","))
    End If
    For Each nm As String  In nms
        str = str & ",\'" & nm & "\'"
    Next
    
    If str > "" Then
        str = str.Trim(",")
        Dim dx As DataRow
        If Val > = 0 Then
            MyFilter = "日期>=\'" & Functions.Execute("服务器时间").AddMonths(-Val) & "\' And 日期 <=\'" & Functions.Execute("服务器时间") & "\' And 单据名称=\'" & FrmName & "\' And 应付会计 In (" & str & ")"
        End If
    End If
End If


Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.Conne cti
cmd.Comm andText = "SEL  ECT * F  rom {" & TableName & "} Where " & MyFilter.Replace("日期",Args(4))
dt = cmd.ExecuteReader()
If dt.DataRows.Count = 0 Then Return Nothing
Dim Columns As String = Args(3)            \'要构建Treeview的字段
TvwCtl.StopRedraw
TvwCtl.Nodes.Clear
TvwCtl.BuildTree(dt,Columns,"当前状态<>\'确认付款\'","当前状态,应付会计")
For Each nd As WinForm.TreeNode In TvwCtl.AllNodes
    If nd.Text.IndexOf("待递交") >= 0 Then
        nd.ExpandAll
    End If
Next


TvwCtl.ResumeRedraw
\'Tables("付款主表.付款录入").AutoSizeCols



今日反应丢了5条数据,而且是主表数据,按道理主表数据有了才能生成关联表数据

--  作者:大红袍
--  发布时间:2015/9/28 16:51:00
--  

1、看是否多用户修改的原因导致;

 

2、如果是网络数据,看是否网络问题导致丢失数据


--  作者:blackzhu
--  发布时间:2015/9/28 17:34:00
--  
主表的编号是新增直接生成的,每一个人分不同的登陆账号登陆输入数据.新增保存是没有问题,但是输入完子表数据后 保存就丢失了 主表数据了


第一个是局域网不应该会是网络造成的. 第二个输入保存时丢了 不应该是修改造成的.




--  作者:大红袍
--  发布时间:2015/9/28 17:40:00
--  

偶尔,就只能是网络的问题了。

 

当无法连上数据库的时候,保存有时是不会报错。


--  作者:zerov
--  发布时间:2015/9/28 17:46:00
--  回复:(大红袍)1、看是否多用户修改的原因导致;&...
1、同一办公室内,估计不会是网络问题。但时好时坏,有时一天也不会出现一个,有时频繁出现10个为丢单的问题。

2、经测试,有时发现同一单子录入过程,明细表被插入另一个主表的明细时,会出现丢失(即前台不显示)的情况,但也全部,偶尔是这种现象。

--  作者:布莱克朱
--  发布时间:2015/9/28 18:53:00
--  
这个完全不搭界,我想了半天只有退出的那段代码起作用,就是在你输入平台数据的时候 有人做了退出的动作删除了后台空平台数据可能性
--  作者:大红袍
--  发布时间:2015/9/28 19:16:00
--  
汗,贴一段无关的代码问人家什么问题。
--  作者:blackzhu
--  发布时间:2015/9/29 8:05:00
--  
想看看这段代码有无问题