以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]后台读取数据计算  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118144)

--  作者:huangfanzi
--  发布时间:2018/4/25 21:15:00
--  [求助]后台读取数据计算
SQL数据库,有一张”末端投料计算任务表“,专门用于记录需要服务端计算的记录,当用户在客户端的记录上在审核列打勾后,会自动将一些数据写到“末端投料计算任务表“
代码如下:
            Dim dr2 As DataRow = _dt末端投料计算任务表.AddNew
            dr2("母捆包号") = e.DataRow("母捆包号")
            dr2("来源表名") = e.DataTable.Name
            dr2("来源行号") = e.DataRow("_Identify")
            dr2("来源类型") = "审核"
            dr2("记录标记2") = e.DataRow("记录标记2")
            dr2.Save

在服务器端的项目中,有个计划任务,每隔5秒读取数据库中的“末端投料计算任务表“,然后开始计算一些数据,计算完成后将已经计算过的数据删除
MyTimers("末端投料计算").Enabled = False ‘开始一轮计算时就暂停此计划,防止同时执行多个计划
Dim drs任务 As List(Of DataRow) = _dt末端投料计算任务表.SQLSelect("[母捆包号] <> \'\' ") \'读取任务表中记录并且写入drs任务集合
    Dim tp As TimeSpan \'定义作业分钟分摊
    Dim Mkbh As New List(Of String) \'定义母捆包号的集合Mkbh
    
    For Each dr As DataRow In drs任务
        If Mkbh.Contains(dr("母捆包号"))= False Then \'将不同的母捆包号写入Mkbh集合
            Mkbh.Add(dr("母捆包号"))
        End If
    Next

此处为计算及保存计算结果的代码。。。

    For Each nm As String In Mkbh
        _dt末端投料计算任务表.SQLDeleteFor("母捆包号 = \'" & nm & "\'")
    Next
    _dt末端投料计算任务表.Save

MyTimers("末端投料计算").Enabled = True ’重新执行计划

在项目开发调试过程中,由于数据量小,一切正常,今天开始正式使用了,一下子在客户端审核了近2000条数据,发现服务端给出的计算结果就有错误了,请问老师,在服务端执行SQLSelect语句时,会不会因为任务表还在不 断的添加记录导致读取数据出现异常情况?如果是,应该如何优化下代码防止
谢谢老师!
[此贴子已经被作者于2018/4/25 21:15:52编辑过]

--  作者:有点甜
--  发布时间:2018/4/25 21:25:00
--  

1、代码没问题,如果计算错误,就是你计算代码有问题,计算逻辑有问题。

 

2、如果是执行比较慢,就是sqDeleteFor执行次数较多造成的。不要重复多次执行sqlxxxxxx这样的代码。你删除的时候,完全可以只删除一次,如

 

_dt末端投料计算任务表.SQLDeleteFor("母捆包号 in \'" & String.Join("\',\'", mkbh.ToArray) & "\'")