以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于禁止输入重复值的新问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=28051)

--  作者:zcw728909
--  发布时间:2013/1/17 11:21:00
--  关于禁止输入重复值的新问题

1.有一个产品信息表(外部数据表),其中:档案编号列不能重复,根据帮助文件在表的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

后来发现了一个问题:这种代码不支持查找后台数据,比如某行的档案编号为:1001,如果这行数据我没有加载,我新增加的行的档案编号还能填为:1001,如何解决这种问题(我在窗口录入和表中直接录入都试了,都有这种情况)

2.同样的情况还出现在自动编号这一块,还是这个表,有个产品ID列,是根据接稿日期列的值自动编号的,代码:

If e.DataCol.Name = "接稿日期" Then
    If e.DataRow.IsNull("接稿日期") Then
        e.DataRow("产品ID") = Nothing
    Else
        Dim bh As String ="CP"& Format(e.DataRow("接稿日期"),"yyyyMMdd") \'取得编号的10位前缀
        If e.DataRow("产品ID").StartsWith(bh) = False Then \'如果编号的前8位不符
            Dim max As String
            Dim idx As Integer
            Dim flt As String
            flt = "接稿日期 > #" & CDate(e.DataRow("接稿日期")).Date & "#"
            flt =  flt & " and 接稿日期 < #" & CDate(e.DataRow("接稿日期")).Date.AddDays(1) & "#"
            max = e.DataTable.Compute("Max(产品ID)",flt)  \'取得该天的最大编号
            If max > "" Then \'如果存在最大编号
                idx = CInt(max.Substring(10,3)) + 1 \'获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 \'否则顺序号等于1
            End If
            e.DataRow("产品ID") = bh & Format(idx,"000")
        End If
    End If
End If

比方说我的接稿日期是2013.01.16 10:35:30,会生成一个产品ID:20130116001,我如果继续录入,产品ID会顺序增加,可是如果我没有加载数据,新的产品ID就会从20130116001开始重新顺序增加,如何能解决从后台判断的问题

[此贴子已经被作者于2013-1-17 11:21:48编辑过]

--  作者:lin_hailun
--  发布时间:2013/1/17 12:11:00
--  
 帮助文档里有的。

http://www.foxtable.com/help/topics/1994.htm

--  作者:zcw728909
--  发布时间:2013/1/17 13:10:00
--  
以下是引用lin_hailun在2013-1-17 12:11:00的发言:
 帮助文档里有的。

http://www.foxtable.com/help/topics/1994.htm

谢谢了,我先试一下,不行了还得来麻烦你