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编辑过]