Foxtable(狐表)用户栏目专家坐堂 → [求助]这是啥错误?


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

主题:[求助]这是啥错误?

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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
[求助]这是啥错误?  发帖心情 Post By:2018/4/12 9:06:00 [只看该作者]

这是啥错误?
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

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


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

贴出你写的代码;最好上传实例测试。


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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2018/4/12 15:44:00 [只看该作者]

以下是引用有点甜在2018/4/12 9:51:00的发言:

贴出你写的代码;最好上传实例测试。

Dim bbxgxs As new List(of String) '本表修改项集合
Dim xsdhs As new List(of String) '此次更新的行
For Each s As String In tbrk
    If s.Contains(e.Form.TableName) Then
        bbxgxs.Add(s)
    End If
Next
Dim zd As New Dictionary(Of String, String) '列名与数据库列对应字典
zd.Add("P数","F3325")
zd.Add("总线数","F3326")
zd.Add("出货日期","F3337")
zd.Add("备注","F3330")
zd.Add("组别","F3327")
zd.Add("塑件材料状况","F2549")
zd.Add("计划生产日","F3328")
zd.Add("完成日期","F3329")
zd.Add("五金材料状况","F2409")
zd.Add("其它备注","F3420")
zd.Add("延迟信息","F4678")
zd.Add("操作记录","F4964")
Dim xxzd As New Dictionary(Of String, String) '生管信息列名与数据库列对应字典
xxzd.Add("P数","P数")
xxzd.Add("总线数","总线数")
xxzd.Add("出货日期","生管交期")
xxzd.Add("备注","生管备注")
xxzd.Add("组别","组别")
xxzd.Add("塑件材料状况","塑件材料状况")
xxzd.Add("计划生产日","计划生产日")
xxzd.Add("完成日期","完成日期")
xxzd.Add("五金材料状况","五金材料状况")
xxzd.Add("其它备注","其它备注")
xxzd.Add("延迟信息","延迟信息")
xxzd.Add("操作记录","操作记录")
Dim xghzd As new Dictionary(of String,String)  '修改条件与修改值字典
Dim xxxghzd As new Dictionary(of String,String)  '生管信息修改条件与修改值字典
For Each bbxgx As String In bbxgxs
    Dim xgs() As String = bbxgx.Split(":")
    If xsdhs.Contains(xgs(1)) = False Then  '本表修改行的销售单号集合
        xsdhs.Add(xgs(1))
    End If
    Dim xgh As DataRow = DataTables(e.Form.TableName).Find("销售单号 = '" & xgs(1) & "'")   '找到修改行
    Dim ddid As Integer  '合同评审单号对应的数据ID
    Dim zdk As String   '修改条件
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "Sele ct ID Fr om {tabDIYTable371} Where F2401 = '" & xgh("合同评审单号") & "'"
    ddid  = cmd.ExecuteScalar()
    zdk = "ID = " & ddid & " and F2405 = " & xgh("原序号")  '得到此合同评审单号更新的条件
    Dim xs As String = ""
    If xghzd.ContainsKey(zdk) Then  '修改条件与修改值字典中有修改条件时,得到修改值
        xs = xghzd(zdk)
    End If
    '合成所有修改的修改值
    Dim ln As String = xgs(2)
    If ln = "P数" Then
        xs = xs & zd(ln) & " = " & xgh(ln) & ",F3326 = " & xgh(ln) * xgh("数量") & ","
    Else
        xs = xs & zd(ln) & " = '" & xgh(ln) & "',"
    End If
    xghzd.Remove(zdk)
    xghzd.Add(zdk,xs)  '更新字典到最新的修改条件与修改值
    '合成所有生管信息修改的修改值
    Dim xxzdk As String  '生管信息修改条件
    Dim xxxs As String = ""
    xxzdk = "合同评审单号 = '" & xgh("合同评审单号") & "' and 原序号 = " &  xgh("原序号")  '得到此合同评审单号更新的生管信息修改条件
    If xxxghzd.ContainsKey(xxzdk) Then  '生管信息修改条件与修改值字典中有修改条件时,得到修改值
        xxxs = xxxghzd(xxzdk)
    End If
    If ln = "P数" Then
        xxxs = xxxs & xxzd(ln) & " = " & xgh(ln) & ",总线数 = " & xgh(ln) * xgh("数量") & ","
    Else
        xxxs = xxxs & xxzd(ln) & " = '" & xgh(ln) & "',"
    End If
    xxxghzd.Remove(xxzdk)
    xxxghzd.Add(xxzdk,xxxs)  '更新生管信息修改字典到最新的修改条件与修改值
Next
Dim keys As new List(of String)
Dim sss As new List(of String)
For Each k As String In xghzd.Keys '显示所有键及其对应的值
    keys.Add(k)
    Dim ss As String = xghzd(k)
    Dim uu As Integer
    uu = ss.LastIndexOf(",")
    ss = ss.Remove(uu)
    sss.Add(ss)
Next
xghzd.Clear
Dim keys1 As new List(of String)
Dim sss1 As new List(of String)
For Each k As String In xxxghzd.Keys '显示所有生管信息修改键及其对应的值
    keys1.Add(k)
    Dim ss As String = xxxghzd(k)
    Dim uu As Integer
    uu = ss.LastIndexOf(",")
    ss = ss.Remove(uu)
    sss1.Add(ss)
Next
xxxghzd.Clear
Vars("逻辑1") = -1
If _MyQueue IsNot Nothing Then
    _MyQueue.Clear   '不为空,清空
End If
Dim cg As Integer = 0
Dim sbts As Integer = 0
For i As Integer = 0 To keys.Count -1
    Try
        Connections("wjexcel").BeginTransaction() '开始事务
        Dim cmd As New SQLCommand
        cmd.C
        cmd.CommandText = "UPD ATE {tabDIYTable372} SET " & sss(i) & " where " & keys(i)
        cmd.ExecuteNonQuery()
        cmd.CommandText = "UPD ATE {订单计划生管信息} SET " & sss1(i) & " where " & keys1(i)
        cmd.ExecuteNonQuery()
        Connections("wjexcel").Commit '提交事务,所有操作生效
        cg = cg + 1
    Catch ex As Exception '如果出错
        msgbox(ex.Message)
        Connections("wjexcel").Rollback() '回滚事务,撤销所有操作
        sbts = sbts + 1
    End Try
Next
'***重新加载行并通知好友更新行****
For Each xsdh As String In xsdhs
    Dim htdr As DataRow = DataTables("订单计划一览表后台").SQLFind("销售单号 = '" & xsdh & "'")
    If htdr IsNot Nothing Then
        Dim dr As DataRow = DataTables(e.Form.TableName).Find("销售单号 = '" & xsdh & "'")
        For Each dc As DataCol In DataTables(e.Form.TableName).DataCols
            dr(dc) = htdr(dc)
        Next
    End If
    Dim msg As String = "U#" & e.Form.TableName & "#" & xsdh
    For Each bd As QQBuddy In QQClient.Buddies
        If bd.Online Then
            QQClient.Send(bd.name, msg)
        End If
    Next
Next
Dim sx As WinForm.Button = e.Form.Controls("Button1") '保存后刷新
sx.PerformClick()
''*****追加行****
'For Each xsdh As String In DataTables("订单计划一览表后台").SQLGetValues("销售单号","是否完成 = '否'")
'Dim xyh As DataRow = DataTables(e.Form.TableName).Find("销售单号 = '" & xsdh & "'")
'If xyh Is Nothing Then
'Dim htdr As DataRow = DataTables("订单计划一览表后台").SQLFind("销售单号 = '" & xsdh & "'")
'Dim dr As DataRow = DataTables(e.Form.TableName).AddNew()
'For Each dc As DataCol In DataTables(e.Form.TableName).DataCols
'dr(dc) = htdr(dc)
'Next
'End If
'Next
'DataTables(e.Form.TableName).Save
'Tables(e.Form.TableName).Filter = ""
'****清除占用登记****
For Each s As String In bbxgxs
    If tbrk.Contains(s) Then
        tbrk.Remove(s) '移除本地编辑登记
        QQClient.Send("!#" & s & "#!") '通知服务器此行已经结束编辑
    End If
Next
MessageBox.Show("更新" & cg & "条,失败" & sbts & "条数.")


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


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

注释掉红色代码,看是否还报错

 

For i As Integer = 0 To keys.Count -1
    Try
        'Connections("wjexcel").BeginTransaction() '开始事务
        Dim cmd As New SQLCommand
        cmd.C
        cmd.CommandText = "UPD ATE {tabDIYTable372} SET " & sss(i) & " where " & keys(i)
        cmd.ExecuteNonQuery()
        cmd.CommandText = "UPD ATE {订单计划生管信息} SET " & sss1(i) & " where " & keys1(i)
        cmd.ExecuteNonQuery()
        'Connections("wjexcel").Commit '提交事务,所有操作生效
        cg = cg + 1
    Catch ex As Exception '如果出错
        msgbox(ex.Message)
        'Connections("wjexcel").Rollback() '回滚事务,撤销所有操作
        sbts = sbts + 1
    End Try
Next


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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2018/4/13 8:51:00 [只看该作者]

以下是引用有点甜在2018/4/12 16:47:00的发言:

注释掉红色代码,看是否还报错

 

For i As Integer = 0 To keys.Count -1
    Try
        'Connections("wjexcel").BeginTransaction() '开始事务
        Dim cmd As New SQLCommand
        cmd.C
        cmd.CommandText = "UPD ATE {tabDIYTable372} SET " & sss(i) & " where " & keys(i)
        cmd.ExecuteNonQuery()
        cmd.CommandText = "UPD ATE {订单计划生管信息} SET " & sss1(i) & " where " & keys1(i)
        cmd.ExecuteNonQuery()
        'Connections("wjexcel").Commit '提交事务,所有操作生效
        cg = cg + 1
    Catch ex As Exception '如果出错
        msgbox(ex.Message)
        'Connections("wjexcel").Rollback() '回滚事务,撤销所有操作
        sbts = sbts + 1
    End Try
Next

这个错误,平时都不报的,出错的机率本就很低。没有死规律,去了也测试不出来,我只是想知道这个错误代码的意思是啥,看后面有没有改进的空间。现在感觉系统在大量使用时,我的SQL负荷很重,有些地方常常出现SQL超时这样的问题。现在这样的问题整的很头大。


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


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

4楼的代码,没必要每次都开启事务。建议开启一个总的事务就好了,尽量不要把事务写在循环里面去,写到循环外面。

 回到顶部