Foxtable(狐表)用户栏目专家坐堂 → 无故退出


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

主题:无故退出

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


加好友 发短信
等级:二尾狐 帖子:500 积分:5397 威望:0 精华:0 注册:2009/2/5 13:09:00
无故退出  发帖心情 Post By:2018/11/19 18:43:00 [只看该作者]

客户资料DataColChanged:

 

 

 

Select Case e.DataCol.Name
    Case "注意事项","已做次数","剩余次数","总次数","执行日期","合同状态"
        Dim Filter As String = "[编号] = '" & e.DataRow("编号") & "' And 锁定 = 0"
        DataTables("派工").ReplaceFor(e.DataCol.Name,e.NewValue,Filter)
        DataTables("派工").save
        DataTables("派工").SQLReplaceFor(e.DataCol.Name,e.NewValue,Filter)
        'Dim drs As List(Of DataRow) = DataTables("派工").Select(Filter)
        'For Each dr As DataRow In drs
        'dr(e.DataCol.Name) = e.NewValue
        'Next
        'DataTables("派工").save
        If Forms("派工").opened
            Dim r As Row = Tables("派工_Table1").Current
            r.DataRow.Load()
        End If
End Select


Select Case e.DataCol.Name
    Case"编号"
        Dim Filter As String = "[编号] = '" & e.DataRow("编号") & "'"
        DataTables("派工").save
        e.DataRow("已做次数") = DataTables("派工").sqlCompute("Sum(次数)", Filter)
        e.DataRow("已派单数") = DataTables("派工").sqlCompute("Sum(派工数量)", Filter)
End Select

 

 

派工   DataColChanged:


 Select Case e.DataCol.Name
    Case "次数","编号","派工数量","工号"
        Tables("派工_Table1").Save()
        Tables("派工").Save()
        Dim Filter As String = "[编号] = '" & e.DataRow("编号") & "'"
        DataTables("客户资料").DataCols("编号").RaiseDataColChanged(filter)
End Select
Select Case e.DataCol.Name
    Case "编号","服务"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("编号") OrElse dr.IsNull("服务") Then
            dr("计分金额") = Nothing
        Else
            Dim filter As String
            filter = "编号 = '" & dr("编号") & "'"
            pr = DataTables("客户资料").SQLFind(filter)
            If pr IsNot Nothing Then
                dr("计分金额") = pr(e.DataRow("服务"))
            End If
        End If
End Select

 

 

是不是代码有问题。会无故退出。  


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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/11/19 20:13:00 [只看该作者]

应该还有其他表事件的代码,然后互相之间形成了环状的引用赋值,导致死循环了

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


加好友 发短信
等级:二尾狐 帖子:500 积分:5397 威望:0 精华:0 注册:2009/2/5 13:09:00
  发帖心情 Post By:2018/11/19 22:00:00 [只看该作者]

比如派工主表   DataColChanged::和sql派工表   DataColChanged:都有一样的代码,是不是这样不对?

 


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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/11/19 22:37:00 [只看该作者]

不是。

就是可能出现:表A第一列触发给表B第一列赋值,表B第一列触发给表C第一列赋值,表C第一列触发给表A第一列赋值,然后表A第一列触发又给表B第一列赋值..........这样不断赋值形成死循环

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


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

你试试赋值的时候,加上systemready

 

http://www.foxtable.com/webhelp/scr/2218.htm

 


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


加好友 发短信
等级:二尾狐 帖子:500 积分:5397 威望:0 精华:0 注册:2009/2/5 13:09:00
  发帖心情 Post By:2018/11/22 12:25:00 [只看该作者]

A电脑修改,其他电脑登录的无故退出,好像是下面的代码造成。

If e.OldRange.RowSel <> e.NewRange.RowSel '如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then '而且原来选择的是一个有效的数据行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) '获得原来选择的行
       
        Dim p As String
        If r.DataRow.RowState = DataRowState.Added Then
            p = "A#"
            r.Save()
            Dim msg As String = p & e.Table.DataTable.Name & "#" & r("_Identify")
            For Each bd As QQBuddy In QQClient.Buddies
                If bd.Online Then
                    QQClient.Send(bd.name, msg)
                End If
            Next
        Else If  r.DataRow.RowState = DataRowState.Modified  Then
            p = "U#"
            r.Save()'一定要在保存后合成信息,因为新增行的主键在保存后才生成
            Dim msg As String = p & e.Table.DataTable.Name & "#" & r("_Identify")
            For Each bd As QQBuddy In QQClient.Buddies
                If bd.Online Then
                    QQClient.Send(bd.name, msg)
                End If
            Next
        End If
    End If
End If

 

我注释了,即时同步的代码后,就没有无故退出了。

是什么原因呢?

 


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


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

1、看你 ReceivedMessage 写了什么代码,贴出来看看;

 

2、6楼的代码,加入 msgbox(e.OldRange.RowSel & " " & e.OldRange.RowSel) 看弹出什么,是否死循环了。

 

3、也有可能是你datacolchanged、currentChanged死循环导致的。


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


加好友 发短信
等级:二尾狐 帖子:500 积分:5397 威望:0 精华:0 注册:2009/2/5 13:09:00
  发帖心情 Post By:2018/11/22 12:34:00 [只看该作者]

ReceivedMessage

代码

 

 

'Dim msg As String = e.Message
'If msg.StartsWith("U#") Then '表示修改了某行
    'Dim pts() As String = msg.Split("#")
    'If pts.Length = 3 Then
        'Dim dr As DataRow = DataTables(pts(1)).Find("[_Identify] = " & pts(2))
        'If dr IsNot Nothing  Then
            'dr.Load() '重新加载此行
        'End If
    'End If   
'ElseIf msg.StartsWith("A#") Then '表示增加了行
    'Dim pts() As String = msg.Split("#")
    'If pts.Length = 3 Then
        'Dim temp As String = DataTables(pts(1)).LoadFilter
        ''DataTables(pts(1)).RemoveFor("[_Identify] = " &  pts(2)) '移除可能存在的行(注释了的)
        'Dim dr As DataRow = DataTables(pts(1)).Find("[_Identify] = " & pts(2))
        'If dr IsNot Nothing  Then
            'dr.Load() '重新加载此行
        'Else
            'DataTables(pts(1)).AppendLoad("[_Identify] = " &  pts(2)) '追载新增加的行
        'End If
        'DataTables(pts(1)).LoadFilter = temp
    'End If
'ElseIf msg.StartsWith("D#") Then '表示删除了行
    'Dim pts() As String = msg.Split("#")
    'If pts.Length = 3 Then
        'DataTables(pts(1)).RemoveFor("[_Identify] = "  & pts(2)) '移除行
    'End If
'End If
'Dim msg As String = e.Message
'If msg.StartsWith("U#") Then '表示修改了某行
    'Dim pts() As String = msg.Split("#")
    'If pts.Length = 3 Then
        'Dim dr As DataRow = DataTables(pts(1)).Find("[_Identify] = " & pts(2))
        'If dr IsNot Nothing  Then
            'dr.Load() '重新加载此行
        'End If
    'End If
'ElseIf msg.StartsWith("A#") Then '表示增加了行
    'Dim pts() As String = msg.Split("#")
    'If pts.Length = 3 Then
         'DataTables(pts(1)).AppendLoad("[_Identify] = " &  pts(2)) '追载新增加的行.
    'End If
'ElseIf msg.StartsWith("D#") Then '表示删除了行
    'Dim pts() As String = msg.Split("#")
    'If pts.Length = 3 Then
         'DataTables(pts(1)).RemoveFor("[_Identify] = "  & pts(2)) '移除行
    'End If
'End If

[此贴子已经被作者于2018/11/22 12:34:32编辑过]

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


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

6楼的代码,加入 msgbox(e.OldRange.RowSel & " " & e.OldRange.RowSel) 看弹出什么,是否死循环了。

 

也有可能是你datacolchanged、currentChanged死循环导致的。

 

如果自己无法调试,做个实例发上来测试。


 回到顶部