以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]窗口输入保存时部份字段内容未保存  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=57524)

--  作者:gfj72
--  发布时间:2014/9/26 9:15:00
--  [求助]窗口输入保存时部份字段内容未保存

专家:

      我建立了一个输入窗口,向表A中录入数据。在录入窗口设计了一个table表(绑定表A),设计了一个

记录窗口(绑定表A)用来输入记录。在表A中利用代码设置了输入记录时,如果第一列与第二列的内容在历史记录中

有重复的,则提醒用户输入重复记录。并把第一列内容清空。这个在窗口输入时都是正常的。我在窗口中设置了

一个保存按钮,设计了如下代码

If DataTables("表A").HasChanges Then
    If Tables("表A").Rows.Count > 0  Then
        Dim Colnames As String() = {"第一列","第二列","第三列","第四列"}
        Dim Issave As Boolean = True
        For Each ColName As String In Colnames
            If Tables("表A").Current.IsNull(ColName) Then
                Issave = False
                MessageBox.Show("当前记录还未输入完成,请完成输入")
                Exit For
            End If
        Next

........

  If Issave Then
            If MessageBox.show("是否保存当前数据?","提示",MessageBoxButtons.YesNo) = DialogResult.Yes  Then
                For Each r As Row In Tables("表A").Rows
                    r.Locked = True
                Next
                DataTables("表A").Save()
            End If
   End If

End If

 

以上我在窗口操作时,当第一列与第二列输入重复值后,正常现示了重复值提示,并

把第一列的值清除了,在Table表A中也现示第一列的内容为空了,如果这时我按保存

会提示值未输入完,不能保存。我如果在第一列输入不同的值后,Table表A中也会显

示相应的值,这时再按保存,就会完成保存,但table表A中的这条记录值会消失掉

但到表A原表中却能找到这条记录,但第一列为空值。以上的现象,是不是我的代码

中哪里有缺陷?

以上,谢谢!

 


--  作者:有点甜
--  发布时间:2014/9/26 9:21:00
--  
 这些代码看不出问题,其它地方影响了,上传一个具体例子加以说明
--  作者:Bin
--  发布时间:2014/9/26 9:21:00
--  
请上例子
--  作者:gfj72
--  发布时间:2014/9/27 11:26:00
--  

原因找到了,If DataTables("表A").HasChanges Then 这个判断,如果第一次发生有重复数据时

会给出提示,并把错误的数据清空,按保存按钮后,系统不会再从第一句进行判定。而是直接保存了。

但为什么会这样,还不清楚。


--  作者:lsy
--  发布时间:2014/9/27 11:37:00
--  

If DataTables("表A").HasChanges Then
    If Tables("表A").Rows.Count > 0  Then
        Dim Colnames As String() = {"第一列","第二列","第三列","第四列"}
        Dim Issave As Boolean = True
        For Each ColName As String In Colnames
            If Tables("表A").Current.IsNull(ColName) Then
                Issave = False
                MessageBox.Show("当前记录还未输入完成,请完成输入")
                Return

            End If
        Next
       
        ........
       
        If Issave Then
            If MessageBox.show("是否保存当前数据?","提示",MessageBoxButtons.YesNo) = DialogResult.Yes  Then
                For Each r As Row In Tables("表A").Rows
                    r.Locked = True
                Next
                DataTables("表A").Save()
            End If
        End If
       
    End If


--  作者:gfj72
--  发布时间:2014/9/27 11:47:00
--  
把附件上传,加上return也一样无效。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:表a.zip


--  作者:gfj72
--  发布时间:2014/9/27 11:51:00
--  

操作,输入时班别最后再输入,如果这时把班别输入与上一记录一样,就会提示有相同记录,

并把班别数据清空,在table表中可以看到已清空,但在记录窗口中并没有被清空,这时如果

按保存钮,不会有任何的提示,这时如果按关闭,可以在原表中发现记录是以空记录存在的。


--  作者:lsy
--  发布时间:2014/9/27 12:02:00
--  
If DataTables("生产记录表").HasChanges Then
    If Tables("生产记录表").Rows.Count > 0  Then
        Dim Colnames As String() = {"生产日期","班次","机台号","产品型号","产品批号","原料型号","原料批号"}
        For Each ColName As String In Colnames
            If Tables("生产记录表").Current.IsNull(ColName) Then
                MessageBox.Show("当前记录还未输入完成,请完成输入")
                Return
            End If
        Next
        Dim dr As Row = Tables("生产记录表").Current
        Dim STR As String = Tables("生产记录表").Current("产品型号")
        Dim Intq As Integer = 2
        Dim Int As Integer = dr("不良数量")
        Dim Intsum As Integer = dr("开调机数")+dr("样品数量")+dr("留样样品")+dr("茶色异物")+dr("黑色异物")+dr("气体划伤")+dr("溶合线")+dr("金属异物")+dr("气泡")+dr("油污")+dr("其它")
        Dim Intm As Integer = dr("机台模数")
        Dim Intc As  Double= (dr("良品数量")+dr("不良数量"))/Intq
        If Int <> Intsum Then
            MessageBox.Show("不良数量与相应的不良项目合计不一致,请确认!","警告",MessageBoxButtons.OK)
            Return
        Else
            If  Intm <> Intc Then
                MessageBox.Show("生产模数与良品数和不良数之和不一致,请确认!","警告",MessageBoxButtons.OK)
                Return
            End If
        End If
        If MessageBox.show("是否保存当前数据?","提示",MessageBoxButtons.YesNo) = DialogResult.Yes  Then
            For Each r As Row In Tables("生产记录表").Rows
                r.Locked = True
            Next
            DataTables("生产记录表").Save()
        End If
    End If
End If

--  作者:gfj72
--  发布时间:2014/9/27 13:09:00
--  

还是无效。


--  作者:gfj72
--  发布时间:2014/9/27 13:15:00
--  

我只要把把第一句判断数据表内容是否变更的语句去掉,就没有问题了,但我想不通的,

明明数据表是发生了变化,为什么会不执行后续的程序,因为最后被保存的数据是没有被

锁定的,说明所有程序在提出警告后被中断了。