以文本方式查看主题 - 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 -- 嗯,只是我现在没有大量的数据去测试性能,所以不知道数据量大了会怎么样,呵呵。 可是我在合并是。会产生提示有重复用户,但是仍然还是会导入当行数据,效果如下。有什么办法在发现重复时则不导入当前行吗?
|
-- 作者:狐狸爸爸 -- 发布时间:2011/7/18 17:59:00 -- 编码合并:
http://www.foxtable.net/help/topics/2137.htm
|