Foxtable(狐表)用户栏目专家坐堂 → sql插入数据时提示重复中止


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

主题:sql插入数据时提示重复中止

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17558 威望:0 精华:0 注册:2014/7/29 19:09:00
sql插入数据时提示重复中止  发帖心情 Post By:2014/10/8 10:49:00 [只看该作者]

下面是某个表beforesavedatarow的代码,目的时将新增加的“产品编码,工序号及仓库组合” 还不存在库存表的产品加入到库存表中。因为保存前有很多更新的动作全部都是添加到一个sql事务函数中统一执行的。
Dim edr As DataRow = e.DataRow
Dim flt2 As String = "仓库 = '" & edr("仓库") & "' and 产品编码 =  '" & edr("产品编码") & "' and 工序号 = " & edr("工序号")
'---新增库存表中没有的产品编码
Dim Incol As String = "仓库,产品编码,品名,规格,工序号,工序名称,计量单位"
Dim Inval As String = "'" & edr("仓库") & "','" & edr("产品编码") & "','" & edr("品名") & "','" & edr("规格") & "'," & edr("工序号") & ",'" & edr("加工内容") & "','" & edr("计量单位") & "'"
str = "If not exists (Select * from 库存表 where " & flt2 & ")" & vbcrlf
str + = "begin " & vbcrlf
str + = "INSERT INTO 库存表 (" & Incol & ") VALUES(" & Inval & ")" & vbcrlf
str + = "End " & vbcrlf

SQLLIST.Add(str)  '将语句添加到事务中

上面已经先用if not exists判断是否存在,不存在再insert.但是新的产品加入时总会提示重复(为避免重复,库存表中用产品编码,仓库,工序号三者建立了组合索引)

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

为什么会这样提示?
谢谢!




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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/10/8 10:53:00 [只看该作者]

看提示似乎是主键重复了.你检查一下看看

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17558 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2014/10/8 11:01:00 [只看该作者]

提示是编码仓库工序号的组合唯一索引重复,我的问题是
在insert前明明有用
If not exists (Select * from 库存表 where " & flt2 & ")" 判断不存在重复才insert的,难道在同一个事务执行中不起作用?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/10/8 11:20:00 [只看该作者]

 回复3楼,请看好你数据库那里设置的主键是什么,主键是不能重复的。

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17558 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2014/10/8 11:29:00 [只看该作者]

主键是_Identify自动增长的,1楼的提示不是组合索引重复吗?


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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/10/8 11:37:00 [只看该作者]

 你在哪一个表的beforesavedatarow写的事件?有可能是你保存两次了。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/10/8 11:39:00 [只看该作者]

 SQL语句应该是没错的,具体最好做个例子测试。

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17558 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2014/10/9 21:47:00 [只看该作者]

这个还是找不到原因,在每一个数据表的beforesavedatarow都有类似的代码,(因为每个表保存时跨表更新的数据都不同)。
怎么判断是保存了一次还是两次?因为保存都是按左上角那个保存按钮,难道按时不注意连续按两次会这样?应该保存过一次的第二次就不会保存了吧?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/10/9 21:50:00 [只看该作者]

 你单独做一个例子测试,看是否也出错,如果出错,上传上来。

 回到顶部