Foxtable(狐表)用户栏目专家坐堂 → 如何实现允许符合条件数据修改,不允许删除


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

主题:如何实现允许符合条件数据修改,不允许删除

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
如何实现允许符合条件数据修改,不允许删除  发帖心情 Post By:2020/4/18 10:33:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:象棋排赛11141.foxdb

密码:888888
  当比赛积分表已引用基本信息表数据,允许基本信息表修改数据,比赛积分表同步自动更新,但不允许基本信息表删除它,DataColChanged事件中的代码实现了允许修改,
Select Case e.DataCol.Name
    Case "棋赛名称","姓名"
        Dim Filter As String 
If e.DataCol.Name = "姓名" Then
Filter = "[棋赛名称] = '" & e.DataRow("棋赛名称") & "'And 姓名 = '" & e.OldValue & "'"
Else
Filter = "[棋赛名称] = '" & e.OldValue & "'And 姓名 = '" & e.DataRow("姓名") & "'"
End If
        e.DataRow.Save
        Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter)
        For Each dr As DataRow In drs
            dr(e.DataCol.Name) = e.NewValue
        Next
End Select
Select Case e.DataCol.Name
    Case "棋赛名称","编号"
        Dim Filter As String 
If e.DataCol.Name = "姓名" Then
Filter = "[棋赛名称] = '" & e.DataRow("棋赛名称") & "'And 编号 = '" & e.OldValue & "'"
Else
Filter = "[棋赛名称] = '" & e.OldValue & "'And 姓名 = '" & e.DataRow("编号") & "'"
End If
        e.DataRow.Save
        Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter)
        For Each dr As DataRow In drs
            dr(e.DataCol.Name) = e.NewValue
        Next
End Select

DataColChanging事件里却写入
Dim s As String = "不允许基本信息表删除已引用到比赛积分表的数据"
Select Case e.DataCol.name
    Case "棋赛名称","姓名"
        Dim dt As DataRow
        Dim dt2 As DataRow
        dt = DataTables("比赛积分").SQLfind("棋赛名称 = '" & e.DataRow("棋赛名称") & "' And 姓名 = '" & e.DataRow("姓名") & "'")
        dt2 = DataTables("对阵表").SQLfind("红方_姓名 = '" & e.DataRow("姓名") & "'" OrElse "黑方_姓名 = '" & e.DataRow("姓名") & "'")
        If dt IsNot Nothing OrElse dt2 IsNot Nothing Then
            MessageBox.Show(s,"提示")
            e.Cancel= True
        End If
        
        e.Cancel = True
    Case "棋赛名称","编号"
        Dim dt1 As DataRow
        Dim dt3 As DataRow
        dt1 = DataTables("比赛积分").SQLfind("棋赛名称 = '" & e.DataRow("棋赛名称") & "'编号 And  = '" & e.DataRow("编号") & "'")
        dt3 = DataTables("对阵表").SQLfind("红方_编号 = '" & e.DataRow("编号") & "'" OrElse "黑方_编号 = '" & e.DataRow("编号") & "'")
        If  dt1 IsNot Nothing OrElse dt3 IsNot Nothing Then
            MessageBox.Show(s,"提示")
            e.Cancel= True
        End If
End Select
不允许修改,很矛盾,请教如何实现这两项要求。
[此贴子已经被作者于2020/4/18 10:40:06编辑过]

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/18 11:06:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛11141.zip



 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/18 11:35:00 [只看该作者]

我的要求是不允删除基本信息表中与比赛积分表的棋赛名称、编号或姓名相同的行,不是单独的棋赛名称、编号、姓名,因为同一人会在不同时期参加不同棋赛,这样写变成都不允许删除了。

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/18 12:09:00 [只看该作者]

改为

Dim s As String = "不允许基本信息表删除已引用到比赛积分表的数据"
Select Case e.DataCol.Name
    Case "棋赛名称","姓名"
        e.DataRow.Save
        If e.NewValue Is Nothing AndAlso e.OldValue > ""
            Dim Filter As String
            If e.DataCol.Name = "姓名" Then
                Filter = "[棋赛名称] = '" & e.DataRow("棋赛名称") & "'And 姓名 = '" & e.OldValue & "'"
            Else
                Filter = "[棋赛名称] = '" & e.OldValue & "'And 姓名 = '" & e.DataRow("姓名") & "'"
            End If
            Dim dt As DataRow
            dt = DataTables("比赛积分").SQLfind( Filter )
            If dt IsNot Nothing Then
                MessageBox.Show(s,"提示")
                e.Cancel= True
            ElseIf e.DataCol.Name ="姓名"
                dt = DataTables("对阵表").SQLfind("红方_姓名 = '" & e.DataRow("姓名") & "' Or 黑方_姓名 = '" & e.DataRow("姓名") & "'")
                If dt IsNot Nothing  Then
                    MessageBox.Show(s,"提示")
                    e.Cancel= True
                End If
            End If
        End If
End Select
Select Case e.DataCol.Name
    Case "棋赛名称","编号"
        e.DataRow.Save
        If e.DataCol.Name = "棋赛名称" AndAlso e.NewValue Is Nothing AndAlso e.OldValue > "" OrElse e.DataCol.Name = "编号" AndAlso e.NewValue = Nothing AndAlso e.OldValue <> Nothing Then
            Dim Filter As String
            If e.DataCol.Name = "编号" Then
                Filter = "[棋赛名称] = '" & e.DataRow("棋赛名称") & "'And 编号 = " & e.OldValue
            Else
                Filter = "[棋赛名称] = '" & e.OldValue & "'And 编号 = " & e.DataRow("编号")
            End If
            
            Dim dt As DataRow
            dt = DataTables("比赛积分").SQLfind(Filter )
            If dt IsNot Nothing Then
                MessageBox.Show(s,"提示")
                e.Cancel= True
            End If
        End If
End Select

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/18 15:47:00 [只看该作者]

不行,比赛积分表有符合条件的数据,基本信息表依然能删除数据和行,另比赛积分表姓名下拉选项没有同步添加新增选项。

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/18 16:44:00 [只看该作者]

我测试没有问题。列出测试步骤

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/18 16:59:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

在基本信息表添加第13行
比赛积分表姓名下拉选项没有同步添加新增选项
比赛积分表有第4行的内容,基本信息表应不能删除与之同符的行,但现在依然能删除!

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

[此贴子已经被作者于2020/4/18 19:56:45编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/18 16:59:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:5.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:6.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2020/4/18 17:00:38编辑过]

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/18 17:08:00 [只看该作者]

我以为是删除单元格数据,如果是整行删除要到BeforeDeleteDataRow事件处理:http://www.foxtable.com/webhelp/topics/0632.htm

原来的代码都没有针对新增的处理,参考

Select Case e.DataCol.Name
    Case "棋赛名称","姓名"
        e.DataRow.Save
        If e.OldValue > ""
            Dim Filter As String
            If e.DataCol.Name = "姓名" Then
                Filter = "[棋赛名称] = '" & e.DataRow("棋赛名称") & "'And 姓名 = '" & e.OldValue & "'"
            Else
                Filter = "[棋赛名称] = '" & e.OldValue & "'And 姓名 = '" & e.DataRow("姓名") & "'"
            End If
            Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter)
            If drs.Count = 0 Then
                Dim nr As DataRow = DataTables("比赛积分").AddNew
                nr("棋赛名称") = e.DataRow("棋赛名称")
                nr("姓名") = e.DataRow("姓名")
                nr("编号") = e.DataRow("编号")
            Else
                For Each dr As DataRow In drs
                    dr(e.DataCol.Name) = e.NewValue
                Next
            End If
        End If
End Select

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/19 9:01:00 [只看该作者]

不行基本信息表里添加人,比赛积分表的姓名下拉选项中没有同步添加,基本信息表里删除人,比赛积分表已有引用数据,基本信息表应不能删除它的数据却能被删除,删除后比赛积分表没同步删除它的所有信息!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛11141.foxdb

密码:888888
[此贴子已经被作者于2020/4/19 19:35:16编辑过]

 回到顶部
总数 32 1 2 3 4 下一页