Foxtable(狐表)用户栏目专家坐堂 → 用事务逐行处理数据


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

主题:用事务逐行处理数据

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


加好友 发短信
等级:五尾狐 帖子:1135 积分:11099 威望:0 精华:2 注册:2008/9/1 10:45:00
用事务逐行处理数据  发帖心情 Post By:2016/10/20 19:07:00 [只看该作者]

For Each dr As DataRow In DataTables("预记帐").DataRows ‘预记帐表是事先添加的要出库的明细
    Dim cr As Row = Tables("出入库明细").AddNew
    cr("商品类别")=dr("商品类别")
    cr("日期")=dr("日期")
    cr("业务类型")="出库"
    cr("商品编号")=dr("商品编号")
    cr("商品名称")=dr("商品名称")
    cr("会计帐务流水号")=kjz("帐务流水号")
    cr("数量")=dr("销售数量")
    cr("商品成本")=dr("贷方发生额")
    cr("销售额")=dr("销售额")
    cr("客户_名称")=dr("客户名称")
    cr("客户_编号")=dr("客户编号")
    cr("客户_客户经理")=dr("客户经理")
    cr("流水号")="C" & Format(dr("日期"),"yyyyMMdd") & format(sz("库房流水号"),"00000")
    cr("经办人")=user.Name
    Dim kc As DataRow = DataTables("库存").sqlFind("商品编号='" & dr("商品编号") & "'")
    If kc IsNot Nothing Then
        kc("商品库存金额")=kc("商品库存金额")-dr("贷方发生额")
        kc("累计出库金额")=kc("累计出库金额") + dr("贷方发生额")
        kc("商品库存")=kc("商品库存")-dr("销售数量")
        kc("累计出库数量")=kc("累计出库数量") + dr("销售数量")
        kc("平均进货价格")=format(kc("商品库存金额") / kc("商品库存"),"0.00")
        kc.Save
        DataTables("库存").Load
    End If
Next

 

这是库存出库的代码,由于网络原因经常出错!如何将这段代码改成事务,请各位老大帮忙!


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110608 积分:562942 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/20 20:22:00 [只看该作者]

除非使用sql操作,否则没有办法使用事务:http://www.foxtable.com/webhelp/scr/2933.htm

上面代码优化一下,可以这样,可以有效提高运行速度

DataTables("库存").StopRedraw
DataTables("库存").Load
DataTables("出入库明细").StopRedraw
For Each dr As DataRow In DataTables("预记帐").DataRows '预记帐表是事先添加的要出库的明细
    Dim cr As DataRow = DataTables("出入库明细").AddNew
    cr("商品类别")=dr("商品类别")
    cr("日期")=dr("日期")
    cr("业务类型")="出库"
    cr("商品编号")=dr("商品编号")
    cr("商品名称")=dr("商品名称")
    cr("会计帐务流水号")=kjz("帐务流水号")
    cr("数量")=dr("销售数量")
    cr("商品成本")=dr("贷方发生额")
    cr("销售额")=dr("销售额")
    cr("客户_名称")=dr("客户名称")
    cr("客户_编号")=dr("客户编号")
    cr("客户_客户经理")=dr("客户经理")
    cr("流水号")="C" & Format(dr("日期"),"yyyyMMdd") & format(sz("库房流水号"),"00000")
    cr("经办人")=user.Name
    Dim kc As DataRow = DataTables("库存").Find("商品编号='" & dr("商品编号") & "'")
    If kc IsNot Nothing Then
        kc("商品库存金额")=kc("商品库存金额")-dr("贷方发生额")
        kc("累计出库金额")=kc("累计出库金额") + dr("贷方发生额")
        kc("商品库存")=kc("商品库存")-dr("销售数量")
        kc("累计出库数量")=kc("累计出库数量") + dr("销售数量")
        kc("平均进货价格")=format(kc("商品库存金额") / kc("商品库存"),"0.00")
    End If
Next
DataTables("出入库明细").Save
DataTables("出入库明细").ResumeRedraw
DataTables("库存").Save
DataTables("库存").ResumeRedraw

另外再优化还可以看看:http://www.foxtable.com/webhelp/scr/2225.htm

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


加好友 发短信
等级:五尾狐 帖子:1135 积分:11099 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2016/10/20 20:46:00 [只看该作者]

我的数据库是SQL的,麻烦帮我改下,觉得用事务出错要少一些,防止执行一半时出错。比如有点10个要出库的商品,执行5个突然出错了,这就比较麻烦了。

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110608 积分:562942 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/20 20:59:00 [只看该作者]

上传项目和数据库,否则没有办法改

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


加好友 发短信
等级:五尾狐 帖子:1135 积分:11099 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2016/10/20 21:17:00 [只看该作者]

已经投入使用了,上传数据库比较麻烦,您给我改个大概就行,我自己一点点测试,多谢了!

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110608 积分:562942 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/20 21:25:00 [只看该作者]

没有办法大概,看不到业务逻辑和数据结构,做出来的东西有害无益。

就是把代码操作改为sql的update/insert等等,自己研究一下sql:http://www.foxtable.com/webhelp/scr/1827.htm

 回到顶部