以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]有关表中列值不能重复的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=11335)

--  作者:dlovef
--  发布时间:2011/7/18 15:10:00
--  [求助]有关表中列值不能重复的问题
假如在一个表中,有A,B两列。我想实现A,B列合起来的值不能重复。即单A列或是单B列的值可以重量,但是A+B不能重复。请问在Foxtable中有什么实现方法吗?
要求不单在单行输入时可以控制,合并时也能控制。
[此贴子已经被作者于2011-7-18 15:10:41编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/18 15:48:00
--  
用DataColchanging事件写代码,判断是否存在这两列值相同的行即可。
--  作者:dlovef
--  发布时间:2011/7/18 15:52:00
--  
那如果是合并表时数据量比较大的话,是不是会对系统性能造成很大的影响呢?
--  作者:狐狸爸爸
--  发布时间:2011/7/18 16:13:00
--  
 没有影响的
--  作者:dlovef
--  发布时间:2011/7/18 16:36:00
--  
因为DataTable不是全加载的,如果用DataColchanging事件写代码,肯定是要用到SQL句吧。每次都要建SQLCommand不会对性能有影响是吗?
另外,假如用DataColchanging事件写代码,有重复是我用MessageBox给用户提示。在合并表时,有两点疑问。
1,假如表中已经存在A+B列相当的行,那么提示用户,并取消该次操作,这时是只取消当前行吗?合并源中的后续数据会不会继续合并。
2,如果有大量数据,是每重复一次就会提示一次吗?

--  作者:狐狸爸爸
--  发布时间:2011/7/18 16:41:00
--  

不用担心性能,因为这个只是输入的时候验证一下而已。

至于你的两个问题,看你怎么编码了。

 


--  作者:dlovef
--  发布时间:2011/7/18 17:32:00
--  
那以下这段代码对性能影响几何?而且在合并表时,并不能阻止数据的导入。请问一下应该怎么改下呢?

\'顾客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编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/18 17:34:00
--  

呵呵,没有影响,你可以自己测试一下的。

 


--  作者:dlovef
--  发布时间:2011/7/18 17:53:00
--  
嗯,只是我现在没有大量的数据去测试性能,所以不知道数据量大了会怎么样,呵呵。
可是我在合并是。会产生提示有重复用户,但是仍然还是会导入当行数据,效果如下。有什么办法在发现重复时则不导入当前行吗?

图片点击可在新窗口打开查看此主题相关图片如下:截图18.jpg
图片点击可在新窗口打开查看


--  作者:狐狸爸爸
--  发布时间:2011/7/18 17:59:00
--  

编码合并:

 

http://www.foxtable.net/help/topics/2137.htm