以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  按照帮助中“自动编号”代码操作碰到的一个问题(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=29363)

--  作者:run1973
--  发布时间:2013/3/5 12:55:00
--  按照帮助中“自动编号”代码操作碰到的一个问题(已解决)

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

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

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

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

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

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

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

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

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

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

 

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

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

--  作者:狐狸爸爸
--  发布时间:2013/3/5 13:01:00
--  

用这个编号:

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

 

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

 

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


--  作者:run1973
--  发布时间:2013/3/5 13:06:00
--  

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

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


--  作者:run1973
--  发布时间:2013/3/5 13:08:00
--  
哦,对了双击单元格数据进入编辑模式,也可以同步数据库吗?!
--  作者:狐狸爸爸
--  发布时间:2013/3/5 13:14:00
--  

不明白你的意思。

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

 

e.Row.DataRow.Load()

 

如果你要保存此行:

 

e.Row.Save()

 

如果你要保存整个表:

 

e.DataTable.Save()

 


--  作者:run1973
--  发布时间: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()可以解决问题。