以文本方式查看主题 - 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 -- 想看看这段代码有无问题 |