假如在一个表中,有A,B两列。我想实现A,B列合起来的值不能重复。即单A列或是单B列的值可以重量,但是A+B不能重复。请问在Foxtable中有什么实现方法吗?
要求不单在单行输入时可以控制,合并时也能控制。
[此贴子已经被作者于2011-7-18 15:10:41编辑过]
用DataColchanging事件写代码,判断是否存在这两列值相同的行即可。
那如果是合并表时数据量比较大的话,是不是会对系统性能造成很大的影响呢?
因为DataTable不是全加载的,如果
用DataColchanging事件写代码,肯定是要用到SQL句吧。每次都要建SQLCommand不会对性能有影响是吗?另外,假如用DataColchanging事件写代码,有重复是我用MessageBox给用户提示。在合并表时,有两点疑问。
1,假如表中已经存在A+B列相当的行,那么提示用户,并取消该次操作,这时是只取消当前行吗?合并源中的后续数据会不会继续合并。
2,如果有大量数据,是每重复一次就会提示一次吗?
不用担心性能,因为这个只是输入的时候验证一下而已。
至于你的两个问题,看你怎么编码了。
那以下这段代码对性能影响几何?而且在合并表时,并不能阻止数据的导入。请问一下应该怎么改下呢?
'顾客ID与所属网站形成合并主键
If e.DataCol.Name = "site" And e.NewValue IsNot Nothing Then
If e.DataRow("cusid") = "" Then
MessageBox.Show("请先输入客户ID!")
e.Cancel=True
Return
End If
Dim cmd As New SQLCommand
cmd.ConnectionName = _ConnectName
cmd.CommandText = "SELECT Count(0) From {t_kh} Where cusid = '" & e.DataRow("cusid") & "' And site = '" & e.NewValue & "'"
Dim cnt As Integer = cmd.ExecuteScalar
If cnt > 0 Then
MessageBox.Show("客户信息表中已经存在【" & e.NewValue & "】的(" & e.DataRow("cusid") & ")!请确认!")
e.Cancel=True
End If
End If
[此贴子已经被作者于2011-7-18 17:33:09编辑过]
嗯,只是我现在没有大量的数据去测试性能,所以不知道数据量大了会怎么样,呵呵。
可是我在合并是。会产生提示有重复用户,但是仍然还是会导入当行数据,效果如下。有什么办法在发现重复时则不导入当前行吗?

此主题相关图片如下:截图18.jpg
