以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  MYSQL模拟关联表保存报错问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187902)

--  作者:lin98
--  发布时间:2023/8/19 11:08:00
--  MYSQL模拟关联表保存报错问题
\'Dim db = HySq--l.DataBaseFactory.CreateDatabase("myjc")
Dim dt As DataTable = e.Form.Controls("Table1").Table.DataTable
Dim dtb As System.Data.DataTable = dt.basetable.Copy \'
dtb.Columns.Remove("_Locked") \'
Dim res = db.Up-dateDataTable(dtb, "cKzb")

Dim dt2 As DataTable = e.Form.Controls("Table2").Table.DataTable
Dim dtb2 As System.Data.DataTable = dt2.basetable.Copy \'
dtb2.Columns.Remove("_Locked") \'
Dim res2 = db.U-pdateDataTable(dtb2, "cKmx")

dt.AcceptChanges()

报错:

“违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条。“

查一下网:


accessmdb数据库动态更新的过程中,遇到了DeleteCommand出现DBConcurrencyException异常,错误:违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条。

程序逻辑:遍历表1的所有行,如果符合条件,则删除表1当前行,且删除表2中的相关行(两行),并在表2中插入新的一行。由于在判断的时候需要用到表2中新插入的行,所以得在循环中实时更新。

经查找:

该错误的原因为:数据库的主键设置为-自动编号

现在用MYS-QL,出现同样问题  


此主题相关图片如下:报错并发.jpg
按此在新窗口浏览图片



没看明白,不知道如何,请老师帮助,谢谢,保存和删除也会报错



--  作者:有点蓝
--  发布时间:2023/8/19 11:18:00
--  
Dim dt2 As DataTable = e.Form.Controls("Table2").Table.DataTable
Dim dtb2 As System.Data.DataTable = dt2.basetable.Copy \'
dtb2.Columns.Remove("_Locked") \'
    dtb2.Columns.Remove("System_Sort_Temporary")
    dtb2.Columns.Remove("System_Filter_Temporary")
    dtb2.Columns.Remove("System_Filter_Unique")
Dim res2 = db.UpdateDataTable(dtb2, "cKmx")
dt2.AcceptChanges()

Dim dt As DataTable = e.Form.Controls("Table1").Table.DataTable
Dim dtb As System.Data.DataTable = dt.basetable.Copy \'
dtb.Columns.Remove("_Locked") \'
    dtb.Columns.Remove("System_Sort_Temporary")
    dtb.Columns.Remove("System_Filter_Temporary")
    dtb.Columns.Remove("System_Filter_Unique")
Dim res = db.UpdateDataTable(dtb, "cKzb")
dt.AcceptChanges()

--  作者:lin98
--  发布时间:2023/8/19 13:04:00
--  
    dtb2.Columns.Remove("System_Sort_Temporary")
    dtb2.Columns.Remove("System_Filter_Temporary")
    dtb2.Columns.Remove("System_Filter_Unique")
这个三行代码,没看懂,老师帮说一下,谢谢

--  作者:有点蓝
--  发布时间:2023/8/19 13:51:00
--  
临时表绑定窗口表后会自动新增一些内部使用的临时列,需要去掉,才能使用UpdateDataTable
--  作者:lin98
--  发布时间:2023/8/19 13:58:00
--  
在测试,发现一个问题

在将新增的数据进行保存,2楼代码是正常,但对修改的数据进行保存,会报错违反并发的提示,修改的数据进行保存改用1楼,也是报同样的错,如何解决?谢谢

--  作者:有点蓝
--  发布时间:2023/8/19 14:25:00
--  
应该是数据库,或者数据库里表格的设置有问题导致的。试试

1、不要使用自增列
2、不要使用AcceptChanges,保存后重新从数据库获取数据绑定窗口表

--  作者:lin98
--  发布时间:2023/8/19 15:48:00
--  
1、不要使用自增列, 好象一般主键都是自增列,还有数据库与窗口的表的交互,也会有
2、不要使用AcceptChanges,保存后重新从数据库获取数据绑定窗口表,
你说新增使用AcceptChanges,修改保存不要AcceptChanges?

--  作者:有点蓝
--  发布时间:2023/8/19 16:11:00
--  
1、其实也就Foxtable习惯使用自增主键,这个是Foxtable的开发模式制约的。我见过的其它软件很少有用这种自增主键。没有自增主键,Foxtable一样可以正常使用

2、最后全部都不用

--  作者:lin98
--  发布时间:2023/8/19 16:25:00
--  
我使用是MYSQL主键自增,  ID设为主键和外键,在窗口上录入时,看不到ID的编号,只有在关 窗口后,重新打开窗口或录入完下一个记录,上移,才看到ID的编号。
由于主键不为空,设定自增
问题一:这样比较不友好,如何解决?


--  作者:有点蓝
--  发布时间:2023/8/19 17:20:00
--  
自增主键只有保存了才会有真正的数据。一般自增主键都不需要看到的,也不会用来做业务关联。考虑自己做编号处理http://www.foxtable.com/webhelp/topics/2403.htm