Foxtable(狐表)用户栏目专家坐堂 → 关联表子表条件禁止重复


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

主题:关联表子表条件禁止重复

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


加好友 发短信
等级:二尾狐 帖子:500 积分:5397 威望:0 精华:0 注册:2009/2/5 13:09:00
关联表子表条件禁止重复  发帖心情 Post By:2016/7/7 19:24:00 [只看该作者]

关联表子表条件禁止重复,比如第二列,第三列,第三列。如果内容一样,子表不能添加。只有父表的其中列改后才能添加子行。
我按帮助里的不行,是什么原因。谢谢!

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


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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:关联表条件禁止重复.table


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/7 20:15:00 [只看该作者]

BeforeAddDateRow事件

 

Dim r As Row = Tables("表A").Current
If r("第二列") = r("第三列") AndAlso r("第三列") = r("第四列") Then
    msgbox("三列不能重复")
    e.cancel = True
End If


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/7 20:15:00 [只看该作者]


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


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

我上传的就是按这个帮助弄的。但是就是不对,麻烦你帮忙看看,是那出错了呢?

 

 

 

假定产品表有型号和规格两列,禁止输入型号和规格相同的产品,可以将这个表的DataColChanging事件代码设置为:

Select Case e.DataCol.name
    Case "型号","规格"
        Dim xh As String
        Dim gg As String
        If e.DataCol.Name= "型号" Then
            xh = e.NewValue
            gg = e.DataRow("规格")
        Else
            gg = e.NewValue
            xh = e.DataRow("型号")
        End If
        If xh > "" AndAlso gg  > "" Then
            Dim dr As DataRow = e.DataRow
            If e.DataTable.Find("型号 = '" & xh & "' And 规格 = '" & gg & "'") IsNot Nothing Then
                MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.Cancel = True
            End If
        End If
End Select

上面的代码有点繁琐。

我们可以变通一下,改为DataColChanged事件事件代码 ,同样可以禁止输入型号和规格相同的行,而且代码会简洁一些:

Select Case e.DataCol.name
    Case
"型号","规格"
       
Dim dr As DataRow = e.DataRow
       
If dr.IsNull("型号") = False AndAlso dr.IsNull("规格") = False Then
            If e.DataTable.Compute("Count([_Identify])","型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "'") > 1 Then
                MessageBox.Show(
"已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.
DataRow(e.DataCol.Name) = e.OldValue '取消输入
           
End If
        End
If
End
Select


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/7 23:42:00 [只看该作者]

DataColChanged事件

 

Select Case e.DataCol.name
    Case "第二列","第三列"
        Dim count As Integer = e.DataTable.compute("count(_Identify)", "第三列 = '" & e.DataRow("第三列") & "' and 第二列 = '" & e.DataRow("第二列") & "'")
        If count > 1 Then
            msgbox("重复了")
        End If
End Select


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


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

夜深了,水平有限,还是没有搞定!

是想实现:如果父表表第二列、第三列、第四列没有变化。则子表不能添加重复列。是增加子表行前执行,如果子行重复复了就不能增加。帮帮我!谢

[此贴子已经被作者于2016/7/8 1:30:55编辑过]

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


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

DataColChanged事件

 

Select Case e.DataCol.name
    Case "第二列","第三列"
        Dim count As Integer = e.DataTable.compute("count(_Identify)", "第三列 = '" & e.DataRow("第三列") & "' and 第二列 = '" & e.DataRow("第二列") & "'")
        If count > 1 Then
            msgbox("重复了")
        End If
End Select

 

可以提示重复了,但还是会增加。希望第二列、第三列、第四列重复了,就不能添加子行。

[此贴子已经被作者于2016/7/8 1:25:39编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/7/8 8:48:00 [只看该作者]

BeforeAddDateRow事件

Dim parent As DataRow = e.DataRow.GetParentRow("父表")
Dim count As Integer = DataTables("父表").compute("count(_Identify)", "第三列 = '" & parent("第三列") & "' and 第二列 = '" & parent("第二列") & "'and 第四列 = '" & parent("第四列") & "'"))
If count > 1 Then
    msgbox("重复了")
    e.Cancel = True
End If

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/8 9:32:00 [只看该作者]

Select Case e.DataCol.name
    Case "第二列","第三列"
        Dim count As Integer = e.DataTable.compute("count(_Identify)", "第三列 = '" & e.DataRow("第三列") & "' and 第二列 = '" & e.DataRow("第二列") & "'")
        If count > 1 Then
            msgbox("重复了")

            e.DataRow.Delete
        End If
End Select


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