Foxtable(狐表)用户栏目专家坐堂 → [openqq]表中没有数据后新增行,程序退出


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

主题:[openqq]表中没有数据后新增行,程序退出

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


加好友 发短信
等级:幼狐 帖子:88 积分:1114 威望:0 精华:0 注册:2017/4/10 17:55:00
[openqq]表中没有数据后新增行,程序退出  发帖心情 Post By:2018/7/8 11:01:00 [只看该作者]

按帮助文件做了一个openQQ的客户端和服务端测试
在全局表事件的 beforeselchanged的事件中添加了
If e.Table.Current Is Nothing Then
Else
    Dim r As Row = e.Table.Current
    Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#")
    r.Save()
    '一定要在保存后合成信息,因为新增行的主键在保存后才生成
    Dim msg As String = p & e.Table.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

全局表DataRowDeleting事件

Dim r As DataRow = e.DataRow

Vars("dmsg") = "D#" & e.DataRow.DataTable.name & "#" & r("_Identify")


全局表DataRowDeleted事件


e.DataRow.DataTable.Save()
For Each bd As QQBuddy In QQClient.Buddies
    If bd.Online Then
        QQClient.Send(bd.name,Vars("dmsg") )
    End If
Next
Vars("dmsg") = ""


测试发现修改数据,删除数据,删除行的没有问题。
如果在表中处在有数据行的时候,新增行及数据是没有问题的。但是如果是表中没有数据的时候新增行是,程序就会闪退了。
请问是什么问题。
其他的设置都是按帮助文件做的。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码doc文件.rar


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


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

试试不要在 BeforeSelChange 事件写代码,把代码改写到click事件或者按钮里面。

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


加好友 发短信
等级:幼狐 帖子:88 积分:1114 威望:0 精华:0 注册:2017/4/10 17:55:00
  发帖心情 Post By:2018/7/9 9:47:00 [只看该作者]

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

事件代码改为上述代码,已经不会自动退出程序了
但是如果当前行修改或新增后没有选择下一行,而是直接进行筛选,就触发不了事件了。请问如何解决
[此贴子已经被作者于2018/7/9 9:49:17编辑过]

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


加好友 发短信
等级:幼狐 帖子:88 积分:1114 威望:0 精华:0 注册:2017/4/10 17:55:00
  发帖心情 Post By:2018/7/9 9:56:00 [只看该作者]

click事件是已经点击了下一个需要修改的行,那如何引用原来的行来通知客户端已经增加或修改。好像没有相应的e参数



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


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

你修改了行等操作的时候,会触发datacolchanged事件的啊,为什么要在你那些地方写代码?

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


加好友 发短信
等级:幼狐 帖子:88 积分:1114 威望:0 精华:0 注册:2017/4/10 17:55:00
  发帖心情 Post By:2018/7/9 23:35:00 [只看该作者]

因为一行可能要修改一个或者几个单元格,如果放在datacolchanged,就重复触发事件几次。不会加重服务器负担吗
换行前判定,就是修改或输入完成后准备换下一行时触发事件同步。我觉得这样的逻辑通顺点图片点击可在新窗口打开查看

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


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

以下是引用samlzc在2018/7/9 9:47:00的发言:
 
事件代码改为上述代码,已经不会自动退出程序了
但是如果当前行修改或新增后没有选择下一行,而是直接进行筛选,就触发不了事件了。请问如何解决
[此贴子已经被作者于2018/7/9 9:49:17编辑过]

 

写一个总的方法,循环每一行数据,判断行状态,如果是新增/修改,就执行代码。把这个方法写到所有你需要同步数据的地方

 

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

 


 回到顶部