Foxtable(狐表)用户栏目专家坐堂 → 如何实现窗口上明细表字段不重复?


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

主题:如何实现窗口上明细表字段不重复?

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
如何实现窗口上明细表字段不重复?  发帖心情 Post By:2019/10/29 16:17:00 [只看该作者]

如何实现窗口上明细表字段不重复?

窗口上有销售主表和销售明细表,要实现功能是:
1、防止销售明细表重复录入,禁止销售明细表的字段单个字段或多个字段重复,如物料号,品名,规格的字段不能重复;限制在窗口编辑,而不限制
     整个表,也就是整个销售明细表可以重复,但窗口录入时是禁止重复;
2.从帮助找禁止重复代码是下面,但窗口上找不到DataColChanging;要如何实现,请老师,指教,谢谢

禁止输入重复值

我们知道,列有禁止输入重复内容的属性,不过这个属性有局限,就是只有直接在表格中输入的时候才有效,如果你通过窗口输入或者是通过代码设置,同样可以输入重复内容。

禁止单列输入重复值

假定有个订单表,要求订单号列不能输入重复值,可以将这个表的DataColChanging事件代码设置为:

If e.DataCol.Name = "订单号" Then
    Dim
 dr As DataRow
    dr = e.
DataTable.Find("订单号 = '" & e.NewValue & "'")
    
If dr IsNot Nothing Then
        MessageBox.Show(
"此订单号已经存在!")
        e.Cancel = 
True
    End
 If
End
 
If

上述代码设置完成后,不管以任何方式,都无法输入重复的订单号。

禁止多列输入重复值

假定产品表有型号和规格两列,禁止输入型号和规格相同的产品,可以将这个表的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


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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/29 16:23:00 [只看该作者]

如果是normal,副本,到主表的DataColChanging事件写代码即可

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/10/30 10:57:00 [只看该作者]

老师,我试一下不行,我上个例,在'窗口管理‘上,请指教,谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:水果进销存.table


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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/30 11:00:00 [只看该作者]

关联表到子表的事件,就是销售单表的DataColChanging事件写代码

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/10/30 12:43:00 [只看该作者]

可能我说明不明白,大部分开发是这样,数据源,数据表,窗体或页面操作设计,而狐表,大部分是表设计,表操作的思维,设计是表属性及表属性的事件,而窗体设计是窗体表引用,类于数据源的表引用,或说数据源引用,和按键事件,没有表属性及表属性的事件设计。
      这么说,狐表内表设计的表,暂叫“狐源表”,常规我们都在“狐源表”设计,如表属性及表属性的事件,问题:

1.“狐源表”(数据源表),它是数据库表,是我们允许也字段重复,比如:我昨天买10个香蕉,今天又买10个香蕉,同产品和数据,但不时间或批次,
   做为数据源表是允许也字段重复;
2.但同产品和数据,同一时间或批次,都在合并写,这里出现允许也字段重复,就是重复录入,是错。

 简单说,数据存储时可以字段重复,录入时不允许也字段重复,现在要录入窗体限制重复,如实例,销售明细表,窗体上“销售明细表”是引用表,在窗体上没找到DataColChanging,只有在数据存储表或“狐源表”(数据源表)才能DataColChanging。

    窗体上“销售明细表”的DataColChanging在哪里能找到?谢谢


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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/30 13:40:00 [只看该作者]

要看窗口表的类型啊,都说了如果是normal,副本,到主表的DataColChanging事件写代码即可

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/10/30 14:55:00 [只看该作者]

我试过不行,是normal,副本,主表和明细表窗口上没DataColChanging,我到源表的主表DataColChanging录入代码,没有效果,这个限制也不太对,主表没有明细表要限制的字段,放在主表怎么能限制,谢谢!

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/10/30 15:06:00 [只看该作者]

请老师,用上面实例处理,谢谢

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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/30 15:15:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:水果进销存.zip


 回到顶部