以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]数据写入问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=51830)

--  作者:alangoon
--  发布时间:2014/6/4 9:33:00
--  [求助]数据写入问题

各位专家,

 

我发现我写的系统在数据写入时有时候会混乱,不知道是怎么回事?我是这样做的:

1. 找到数据:

    Dim dr as DataRow = DataTables(XX).Find("XX")

2. 判断数据是否存在:

    IF dr IsNot Nothing then

       写入;

    End If

如果数据少,在10几行的情况下写入时没有问题。但是在40多行时就不行了。

发生写入错误的情况在循环写入时:

例如我的转仓单,因为转仓单在操作时有两部分要处理:

转入--入库累计要加;

转出--出库累计要加;

在数据多的时候发现转入是没有问题的。而转出就直接没有处理了。代码如下:

\'转仓操作函数
Dim Rowscount As Integer = 0

If Tables("转仓单主文件").Rows.Count > 0 Then
    Dim fm_stock As String
    fm_stock = Tables("转仓单主文件").Current("由仓库编码")
    Dim To_stock As String
    To_stock = Tables("转仓单主文件").Current("到仓库编码")
    With Tables("转仓单主文件")
        If .Current("完成转仓") Then
            MessageBox.Show("请不要重复转仓操作!")
        Else
            If .Current("审核标记") Then
                \'Functions.Execute("Show_OK",True)
                For Each r As Row In Tables("转仓单主文件.转仓单明细表").Rows
                    \' 根据仓库编号和物料编号查仓库是否存在,存在则更新,不存在则新增一条信息
                    Dim dr As DataRow = DataTables("库存清单主文件").Find("仓库编码 = \'" & To_stock & "\' And 物料编号 = \'" & r("物料编号") & "\'")
                    If dr IsNot Nothing Then
                        dr("入库累计") = dr("入库累计") + r("转仓数量") \'更新to_stock 入库累计
                        dr("最近入库日期") = .Current("转仓日期")
                        Functions.Execute("WriteToStockLog",.Current("转仓单编号"),.Current("转仓日期"),.Current("转仓原因"),r("物料编号"),r("转仓数量"),0,r("备注"),To_stock)
                        \' WriteToStockLog(单据号,单据日期,出入库原因,物料编号,入库数量,出库数量,备注,仓库编码)--写入出入库记录表
                        Dim dr1 As DataRow = DataTables("库存清单主文件").Find("仓库编码 = \'" & fm_stock & "\' And 物料编号 = \'" & r("物料编号") & "\'")
                        If dr1 IsNot Nothing Then \'更新fm_stock 出库累计
                            dr1("出库累计") = dr1("出库累计") + r("转仓数量")
                            dr1("最近出库日期") = .Current("转仓日期")
                            \'messageBox.Show(dr1("出库累计"))
                            Functions.Execute("WriteToStockLog",.Current("转仓单编号"),.Current("转仓日期"),.Current("转仓原因"),r("物料编号"),0,r("转仓数量"),r("备注"),fm_stock)
                            r("状态") = "已入帐"
                            Rowscount = Rowscount + 1 \'每操作一次加1
                        End If
                    Else \'不存在则新增一条信息
                        Dim dr0 As DataRow = DataTables("库存清单主文件").AddNew
                        dr0("仓库编码") = To_stock
                        dr0("仓库类别") = r("仓位")
                        dr0("库位号") = r("库位")
                        dr0("物料编号") = r("物料编号")
                        dr0("物料描述") = r("物料描述")
                        dr0("计量单位") = r("计量单位")
                        dr0("入库累计") = r("转仓数量")
                        dr0("最近入库日期") = .Current("转仓日期")
                        r("状态") = "已入帐"
                        Functions.Execute("WriteToStockLog",.Current("转仓单编号"),.Current("转仓日期"),.Current("转仓原因"),r("物料编号"),r("转仓数量"),0,r("备注"),To_stock)
                        Rowscount = Rowscount + 1 \'每操作一次加1
                    End If
                Next
            Else
                MessageBox.Show("审核后的单据才能进行其他操作!")
            End If
        End If
    End With
Else
    Messagebox.Show("没有数据可以转仓!","提示")
End If

If Rowscount = Tables("转仓单主文件.转仓单明细表").Rows.Count Then
    Tables("转仓单主文件").Current("完成转仓") = True
    DataTables("库存清单主文件").Save
    \'Functions.Execute("Show_OK",False)
    Return 1
Else
    Return 0
End If

 

请各位专家帮忙指点一下是不是写入代码出了什么问题?


--  作者:Bin
--  发布时间:2014/6/4 9:35:00
--  
请上例子.
--  作者:alangoon
--  发布时间:2014/6/4 9:40:00
--  

请问Bin版是看不懂代码?因为系统很大,而且有数据,不好上啊。简单的好说,但是因为涉及到好多表,也不好精简。请帮忙看看代码,好吗?

主要是如下代码:
Dim dr As DataRow = DataTables("库存清单主文件").Find("仓库编码 = \'" & To_stock & "\' And 物料编号 = \'" & r("物料编号") & "\'")
                    If dr IsNot Nothing Then
                        dr("入库累计") = dr("入库累计") + r("转仓数量") \'更新to_stock 入库累计
                        dr("最近入库日期") = .Current("转仓日期")
                        Functions.Execute("WriteToStockLog",.Current("转仓单编号"),.Current("转仓日期"),.Current("转仓原因"),r("物料编号"),r("转仓数量"),0,r("备注"),To_stock)
                        \' WriteToStockLog(单据号,单据日期,出入库原因,物料编号,入库数量,出库数量,备注,仓库编码)--写入出入库记录表
                        Dim dr1 As DataRow = DataTables("库存清单主文件").Find("仓库编码 = \'" & fm_stock & "\' And 物料编号 = \'" & r("物料编号") & "\'")
                        If dr1 IsNot Nothing Then \'更新fm_stock 出库累计
                            dr1("出库累计") = dr1("出库累计") + r("转仓数量")
                            dr1("最近出库日期") = .Current("转仓日期")
                            \'messageBox.Show(dr1("出库累计"))
                            Functions.Execute("WriteToStockLog",.Current("转仓单编号"),.Current("转仓日期"),.Current("转仓原因"),r("物料编号"),0,r("转仓数量"),r("备注"),fm_stock)
                            r("状态") = "已入帐"
                            Rowscount = Rowscount + 1 \'每操作一次加1
                        End If


--  作者:有点甜
--  发布时间:2014/6/4 10:01:00
--  

 看代码不好看出问题。

 

 你自己调试一下吧 http://www.foxtable.com/help/topics/1485.htm

 


--  作者:alangoon
--  发布时间:2014/6/4 10:15:00
--  

已经有用Msgbox调试了,有输出的。运行上也没有任何错误。

不知道用SQL语句操作会不会好点。


--  作者:有点甜
--  发布时间:2014/6/4 10:18:00
--  
你用msgbox弹出对应的值看看,看是否进入了某个判断,看看值是否正确,从而排除错误。