以文本方式查看主题

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

--  作者:bressernon
--  发布时间:2016/8/1 16:04:00
--  SQL 数据丢失
使用狐表录入数据,保存后重新打开程序,产生有部分数据丢失。
没有多人同时编辑这个表格,使用外部SQL数据库。
有些是日期丢失,有些是其他数据丢失,没有出现整行数据丢失的情况。
发生的频率不定期,有时候几天没有,有时候一天出现好几条。

具体情况请见附件,谢谢了。

图片点击可在新窗口打开查看此主题相关图片如下:丢失代码错误2.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:丢失代码错误1.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:eventcode 流失数据错误.zip



--  作者:大红袍
--  发布时间:2016/8/1 18:38:00
--  
 数据不会无缘无故丢失。只有你修改成对应的单元格,保存了,才会出现丢失的情况。
--  作者:bressernon
--  发布时间:2016/8/1 19:26:00
--  
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:structure 丢失数据错误.zip


附件是数据结构。

从源代码中可以看到,如果没有输入“加工日期”,是没有办法输入“零件项号”。

但是保存重新打开以后,发现“零件项号”是有的,但是“加工日期”没有了。
对于”加工日期“列,在输入“零件项号“以后无法更改的。

    Case "加工日期"

        If e.DataRow.IsNull("零件项号") = False Then

            MessageBox.Show("请删除零件项号后再更改", "提示")

            e.Cancel = True



    Case "零件项号"

        If e.DataRow.IsNull("生产批号") = False Then

            MessageBox.Show("已经存在生产批号和卡片序号,无法更改项号", "提示")

            e.Cancel = True

        Else If e.NewValue <> Nothing Then

            If e.DataRow.IsNull("加工日期") = True Then

                MessageBox.Show("请先填写日期", "提示")

                e.Cancel = True

            Else

                Dim dr As DataRow

                dr = DataTables("轴类零件数据表").Find("[零件项号] = \'" & e.NewValue & "\' And [当前在产] = True")

                If dr IsNot Nothing Then

                    Dim tbp As New DropTreeBuilder

                    tbp.SourceTable = DataTables("轴类零件生产汇总表") \'指定目录树表

                    tbp.TreeCols = "生产批号" \'指定用于生成目录树的列

                    tbp.SourceCols = "生产批号" \'指定数据来源列

                    tbp.ReceiveCols = "生产批号" \'指定数据接收列

                    tbp.TreeFilter = "[生产中] = True And " & "[零件项号] = \'" & e.NewValue & "\'"

                    Tables("轴类生产点检记录").Cols("生产批号").DropTree = tbp.Build()

                Else

                    MessageBox.Show("输入的零件项号有误,请检查该零件是否当前在产", "提示")

                    e.Cancel = True

                End If

            End If

        Else If e.NewValue Is Nothing Then

            Tables("轴类生产点检记录").Cols("生产批号").DropTree = Nothing

        End If


--  作者:Hyphen
--  发布时间:2016/8/2 9:38:00
--  
代码看不出问题,可能是多个事件互相影响的原因
--  作者:bressernon
--  发布时间:2016/8/2 11:06:00
--  
想问一下,一般是什么情况下会发生这种问题。
另外对于SQL数据的处理有没有特别需要注意的地方?
谢谢


--  作者:Hyphen
--  发布时间:2016/8/2 11:10:00
--  
就是多个事件互相影响的时候。

加载到项目,处理方法都一样的,没有什么特别的

--  作者:大红袍
--  发布时间:2016/8/2 18:35:00
--  

 逻辑上,好像是没有问题。

 

 也有一种可能,是网络的问题,导致保存的时候,一些数据无法保存进去,数据就丢失了。网络不稳定的时候,会有此问题。