Foxtable(狐表)用户栏目专家坐堂 → 关联与增加行导致崩溃退出的问题


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

主题:关联与增加行导致崩溃退出的问题

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
关联与增加行导致崩溃退出的问题  发帖心情 Post By:2015/2/15 23:29:00 [只看该作者]

在帮助文件有个代码,按照代码输入之后,点击窗口增加订单后,foxtable崩溃然后退出,是怎么回事?

 

 

附:

有的时候,希望父表增加一行后,能够在子表自动对应增加一行,以提高输入效率。
例如订单和订单明细表,通过订单编号建立关联,希望新增一订单,并输入订单编号后,能自动为该订单增加一个订单明细。
为此可以设置订单表的DataColChanged事件为:

Select Case e.DataCol.Name
    Case "订单编号"
        If e.DataRow.IsNull("订单编号") = False Then '如果已经输入订单编号
            If e.DataRow.GetChildRows("订单明细").Count = 0 Then '而且无订单明细
                Dim dr As DataRow = DataTables("订单明细").AddNew()
                dr("订单编号") = e.DataRow("订单编号")
            End If
        End If
End Select


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


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

Select Case e.DataCol.Name
    Case "订单编号"
        If e.DataRow.IsNull("订单编号") = False Then '如果已经输入订单编号
            If e.DataRow.GetChildRows("订单明细").Count = 0 Then '而且无订单明细
                systemready = False
                Dim dr As DataRow = DataTables("订单明细").AddNew()
                dr("订单编号") = e.DataRow("订单编号")
                systemready = True
            End If
        End If
End Select

 


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
  发帖心情 Post By:2015/2/23 14:16:00 [只看该作者]

谢谢,这个问题已经解决了。 另外还有个问题是,按照帮助文件的代码订单和订单明细互相删除会出现错误:

 

 

1. 在订单表的BeforeDeleteDataRow事件代码设置为:

If e.DataRow.GetChildRows("订单明细").Count > 0 Then
    Dim s As String = "此订单存在订单明细, 是否确定要删除此订单及其订单明细?"
   
If MessageBox.Show(s,"提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.No
        e.Cancel=
True
   
End If
End
If

2.

在订单明细的DataRowDeleting输入:

Dim pr As DataRow = e.DataRow.GetParentRow("订单") '获得此明细对应的订单

If pr IsNot  Nothing Then '如果有对应的订单

     If pr.GetChildRows("订单明细").count  = 1 Then '且这个订单的明细只有一个了

           pr.Delete '删除这个订单

     End If

End If

 

然后删除订单明细最后一行时,会提示:"此订单存在订单明细, 是否确定要删除此订单及其订单明细?" ,然后出现错误:调用的目标发生了异常。
不能在 OnRowDeleting 事件内部调用 Delete。引发异常以取消此删除。

 

 

请问这个怎么解决?


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


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

systemready = False
pr.Delete '删除这个订单
systemready = True

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
  发帖心情 Post By:2015/2/23 15:04:00 [只看该作者]

以下是引用有点甜在2015/2/23 14:34:00的发言:
systemready = False
pr.Delete '删除这个订单
systemready = True

这个方法貌似不行啊


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


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

 例子发上来。

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
  发帖心情 Post By:2015/2/23 16:00:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:订单和订单明细互删冲突.foxdb


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


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

   
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目152.foxdb


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
  发帖心情 Post By:2015/2/23 16:57:00 [只看该作者]

以下是引用有点甜在2015/2/23 16:17:00的发言:
   
 下载信息  [文件大小:404.0 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:管理项目152.foxdb

 

删除订单明细可以了,但是倒过来删除订单又不行了


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


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

 主表删除代码

 

If e.DataRow.GetChildRows("订单明细").Count > 0 Then
    Dim s As String = "此订单存在订单明细, 是否确定要删除此订单及其订单明细?"
    If MessageBox.Show(s,"提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.No
        e.Cancel= True
    Else
        systemready = False
        DataTables("订单明细").DeleteFor("单号 = '" & e.DataRow("单号") & "'")
        systemready = True
    End If
End If


 回到顶部
总数 14 1 2 下一页