Foxtable(狐表)用户栏目专家坐堂 → 按照帮助中“自动编号”代码操作碰到的一个问题(已解决)


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

主题:按照帮助中“自动编号”代码操作碰到的一个问题(已解决)

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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
按照帮助中“自动编号”代码操作碰到的一个问题(已解决)  发帖心情 Post By:2013/3/5 12:55:00 [只看该作者]

外部sql数据源,有一个表中的编号列是自动生成编号,格式和帮助中“自动编号”代码一样,如:MG20130305-0001。

测试中发现一个问题,偶尔会在保存时提示有主键约束,即主键值重复,无法保存,可是表中显示的明明就是唯一的编码,难道是我眼花了?!值得说明的是,这个报错信息来自SQL数据库。

因为这个现象不是经常出现,即使出现,打开主表,把编码列的几个编码分别用鼠标左键“点进去”,再保存就好了,就不会出现报错提示。

我百思不解,反复看代码,也看不出毛病。

今天又碰到这个现象,决心把原因找到,我专门把数据库打开,一对比,找到了!

原来,故障发生在把已生成的自动编号记录删除后又添加这一操作上。为方便说明,我按数据变化的步骤说明:

1、新增行,生成自动编号记录,记录行中其它数据正常输入,如此输入多行,保存。

2、数据库中出现了刚保存的几条记录。

3、发现刚输入的记录最后一条有误,删除。新增行,输入,保存,出现来自数据库的主键重复的报错!

4、此时,数据库中,刚才被删除的表记录数据实际还存在,原因找到了,表记录最后一行删除后,数据库未同步更新,表中再次新增行记录的编码就会和数据库原有记录编码冲突,故报错。

 

原因找到了,貌似在删除按钮中加入个保存命令就可以解决问题。可我总觉得不太满意,请教专家还有其它办法没有?因为,我发现,只要在表中出现冲突的编码单元格双击进入编辑模式,什么都不做再退出,表就可以保存,不再报错。双击单元格也可以同步数据库吗?!

[此贴子已经被作者于2013-3-5 14:52:55编辑过]

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


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

用这个编号:

http://www.foxtable.com/help/topics/1994.htm

 

或者foxtable也可以考虑改进一下保存顺序,先保存删除的行,再保存增加的行。

 

其实你删除行后,保存一下,也没有什么关系的。


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/5 13:06:00 [只看该作者]

谢谢,狐狸爸爸中午还加班回帖啊,服务态度不是盖的,呵呵。

我已发动手下员工都来学foxtable,所以这个月还想买套开发版。支持foxtable!


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/5 13:08:00 [只看该作者]

哦,对了双击单元格数据进入编辑模式,也可以同步数据库吗?!

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


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

不明白你的意思。

如果你要编辑前同步此行数据,可以在StartEdit事件中设置代码:

 

e.Row.DataRow.Load()

 

如果你要保存此行:

 

e.Row.Save()

 

如果你要保存整个表:

 

e.DataTable.Save()

 


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/5 14:47:00 [只看该作者]

以下是引用狐狸爸爸在2013-3-5 13:01:00的发言:

用这个编号:

http://www.foxtable.com/help/topics/1994.htm

 

或者foxtable也可以考虑改进一下保存顺序,先保存删除的行,再保存增加的行。

这个方案最好,在DatarowDeleted事件中写一句e.datarow.save()可以解决问题。

 回到顶部