Foxtable(狐表)用户栏目专家坐堂 → Datatable("xx").save() 数据一致问题


  共有2914人关注过本帖树形打印复制链接

主题:Datatable("xx").save() 数据一致问题

帅哥哟,离线,有人找我吗?
tommyfung
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:183 积分:2008 威望:0 精华:0 注册:2013/2/28 18:11:00
Datatable("xx").save() 数据一致问题  发帖心情 Post By:2014/5/5 19:19:00 [只看该作者]

数据环境 : 远程连接 ( VPN )

 

5-6发布 数据库事务 解决后台 数据一致问题

 

但在前台的如何解决 ?

 

以下代码为需一致更新以下数据表 :

分配备料单( PRWIRH, PRWIRD ),

物料主档 (GBITEM),

物料分仓库存(ICBALN)

交易帐(ICMOVH, ICMOVD)

 

问题 : 由於是远程数据, 有时网络速度不稳定, 致 "数据超时", 请教如何有效处理 ?

 

 

以下是主要更新代码 : 

 

    Dim drx As Row=Tables("PRWIRH").Current
        drx("STATUS") = 3
        DataTables("PRWIRH").save()

    Dim dry As Row=Tables("PRWIRD").Current
    Dim dra As Row=Tables("ICBALN").Current
    stno = Functions.Execute("Get_STNO")   ' Get and Update the EPN STNO
    Dim hrec As DataRow = DataTables("ICMOVH").AddNew()
        hrec("REF_NO") = stno
        hrec("TRAN_TYPE") = "MVMT"
        hrec("MOVE_DATE") = Date.Today
        hrec("VALUE_DATE") = Date.Today
        hrec("POSTED") = "N"
        hrec("POSTED_STEP1") = "N"
        hrec("FLOW_TYPE") = "T"
        hrec("MOVE_TYPE") = "DirTrn"
        hrec("LOC_FROM") = dry("Loc_from")
        hrec("LOC_TO") = dry("Loc_to")
        hrec("REFERENCE") = dry("Ref_no")
        hrec("LOG_NO") = 0
        hrec("SOURCE_TYPE") = "Entry"
        hrec("FINAL") = "N"
        hrec("BATCH_SELECT") = "N"
        hrec("GL_LINK") = "N"
        hrec("OWNER_BRANCH") = "01"
        hrec("SOURCE_BRANCH") = "01"
        hrec("FOLLOW_LIST") = "N"
        hrec("FROZEN") = "N"
        hrec("EXCLUDE_SCRAP") = "N"
        hrec("STEP_NO") = 0
        hrec("PERIOD") = PERIOD
        hrec("FISCAL_YEAR") = FISCAL_YEAR
        hrec("PERIOD_NO") = PERIOD_NO
        hrec("CREATED_BY") = "EPN2"
        hrec("CREATED_DATE") = servertime
        hrec("REVISED_BY") = "EPN2"
        hrec("REVISED_DATE") = servertime
        If Functions.Execute("RequestDataTable","EPN数据","select * from prwird where POSTED = 1 AND FINISHED = 0 AND [Assign_Qty] > 0 And [LOC_FROM] = '" & hrec("LOC_FROM") & "' AND [LOC_TO] = '" & hrec("LOC_TO") & "'" & " And REVISED_BY=N'" & Functions.Execute("GetChUser") & "' And REVISED_DATE='" & Date.Today & "'").DataRows.Count>0 Then
           DataTables("ICMOVH").Save()
        End If

        'Modify at 2013-09-09
        DataTables("PRWIRD").LoadFilter = "POSTED = 1 AND FINISHED = 0 AND [Assign_Qty] > 0 And [LOC_FROM] = '" & hrec("LOC_FROM") & "' AND [LOC_TO] = '" & hrec("LOC_TO") & "'" & " And REVISED_BY=N'" & Functions.Execute("GetChUser") & "' And REVISED_DATE='" & Date.Today & "'"
        DataTables("PRWIRD").Load
        If(Tables("PRWIRD").Rows.Count=0) Then
           MessageBox.Show("没有分配数量","提示",MessageBoxButtons.Ok,MessageBoxIcon.Information)
           DataTables("ICMOVH").RejectChanges()
           Return
        End If
        Functions.Execute("ModifyRecord","EPN数据","UPDATE ICMOVH SET CREATED_DATE=GETDATE(),REVISED_DATE=GETDATE() WHERE REF_NO='" & stno & "'")

      Dim LINENO As Integer = 1
      Dim dri As DataRow
      Dim dt As DataTable
      'Return
      For Each dr As DataRow In DataTables("PRWIRD").DataRows
          dri = DataTables("ICBALN").Find("[item_no] = '"&dr("ITEM_NO") & "' and [LOC] = '" & dr("LOC_FROM") & "'")
          If dri IsNot Nothing Then   
             dri("QTY_COMMITTED") = dri("QTY_COMMITTED") + dr("ASSIGN_QTY")
             dri("QTY_RESERVED") = dri("QTY_RESERVED") - dr("ASSIGN_QTY")
             DataTables("ICBALN").Save()
          Else
             MessageBox.Show("Cannot write to ICBALN " & dr("Item_no"))
             Exit For
          End If

 

'         ** Update GBITEM
         cmd.CommandText = "Select * FROM {GBITEM} Where Item_no = '" & dr("ITEM_NO") & "'"   '注意要包括主键列
         dt = cmd.ExecuteReader(True) '注意可选参数设置为True

         For Each drg As DataRow In dt.DataRows
             drg("QTY_COMMITTED") = drg("QTY_COMMITTED") + dr("ASSIGN_QTY")
             drg("QTY_RESERVED") = drg("QTY_RESERVED") - dr("ASSIGN_QTY")
             drg("QTY_NET_AVAILABLE")=drg("QTY_NET_AVAILABLE")-dr("ASSIGN_QTY")
         Next
         dt.Save()

 

         Dim nrec As DataRow = DataTables("ICMOVD").AddNew()
          nrec("REF_NO") = stno
          nrec("LINE_NO") = lineno
          nrec("ITEM_NO") = dr("ITEM_NO")
          nrec("DESCRIPTION") = dr("DESCRIPTION")
          nrec("UOM") = dr("Uom")
          nrec("LOT_SIZE") = 1
          nrec("LINE_REF") = dr("Job_no")
          nrec("QTY") = dr("Assign_Qty")
          nrec("BASE_QTY") = dr("Assign_qty")
          nrec("FINAL") = "N"
          nrec("FLOW_TYPE") = "T"
          nrec("ALLOC_METHOD") = "N"
          nrec("SOURCE_TYPE") = "Entry"
          nrec("SOURCE_ENTRY_NO") = 0
          nrec("LOC_FROM") = dr("Loc_from")
          nrec("LOC_TO") = dr("Loc_to")
          dr("issued_qty") = dr("issued_qty") + dr("assign_qty")
          dr("assign_qty") = 0
          If(Cstr(dr("st_no"))<>"") Then
            dr("st_no") = dr("st_no")+","+stno
          Else
            dr("st_no") =stno
          End If
          dr("Finished") = iif(dr("Need_Qty")-dr("Issued_qty")-dr("Assign_Qty") = 0,1,0)
          DataTables("ICMOVD").Save()
          dr.Save()
          lineno = lineno + 1
      Next
      DataTables("PRWIRD").Save

 

[此贴子已经被作者于2014-5-5 19:25:54编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/5 19:28:00 [只看该作者]

 5.6版本的事务,不能用于Datatables().Save方法,只有用sqlCommand的,才能用事务。

 

 或许以后可能会对save方法进行事务的支持,而现在,你只能是用sql语法的方法才能达到你的功能需求。


 回到顶部
帅哥哟,离线,有人找我吗?
tommyfung
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:183 积分:2008 威望:0 精华:0 注册:2013/2/28 18:11:00
  发帖心情 Post By:2014/5/5 20:04:00 [只看该作者]

以上代码有改善吗, 可减少数据不一致情况 ?

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/5 20:12:00 [只看该作者]

以下是引用tommyfung在2014-5-5 20:04:00的发言:

以上代码有改善吗, 可减少数据不一致情况 ?

 

 

只要是大量数据的save操作,都有网络断开导致一些数据保存一些数据不保存的可能。

 

如果要精确的话,就必须把你的dr.save() 改成sql语句,如 update {表A} set 第一列 = 2 where _Identify = 123


 回到顶部