Foxtable(狐表)用户栏目专家坐堂 → [求助]有关表中列值不能重复的问题


  共有12147人关注过本帖树形打印复制链接

主题:[求助]有关表中列值不能重复的问题

帅哥哟,离线,有人找我吗?
dlovef
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
[求助]有关表中列值不能重复的问题  发帖心情 Post By:2011/7/18 15:10:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/18 15:48:00 [只看该作者]

用DataColchanging事件写代码,判断是否存在这两列值相同的行即可。

 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/18 15:52:00 [只看该作者]

那如果是合并表时数据量比较大的话,是不是会对系统性能造成很大的影响呢?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/18 16:13:00 [只看该作者]

 没有影响的

 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/18 16:36:00 [只看该作者]

因为DataTable不是全加载的,如果用DataColchanging事件写代码,肯定是要用到SQL句吧。每次都要建SQLCommand不会对性能有影响是吗?
另外,假如用DataColchanging事件写代码,有重复是我用MessageBox给用户提示。在合并表时,有两点疑问。
1,假如表中已经存在A+B列相当的行,那么提示用户,并取消该次操作,这时是只取消当前行吗?合并源中的后续数据会不会继续合并。
2,如果有大量数据,是每重复一次就会提示一次吗?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/18 16:41:00 [只看该作者]

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

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

 


 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/18 17:34:00 [只看该作者]

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

 


 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/18 17:53:00 [只看该作者]

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/18 17:59:00 [只看该作者]


 回到顶部