以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]DataTable 内部索引已损坏:“5”。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=158476)

--  作者:xiaoqiwei
--  发布时间:2020/11/21 3:14:00
--  [求助]DataTable 内部索引已损坏:“5”。
Foxtable版本:2020-01-19

这是什么问题?突然这样,总是报下面两个错误

System.InvalidOperationException: DataTable 内部索引已损坏:“5”。
   在 System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 mainTreeNodeID, Int32 position, Boolean append)
   在 System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 mainTreeNodeID, Int32 position, Boolean append)
   在 System.Data.Index.RecordStateChanged(Int32 oldRecord, DataViewRowState oldOldState, DataViewRowState oldNewState, Int32 newRecord, DataViewRowState newOldState, DataViewRowState newNewState)
   在 System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
   在 System.Data.DataTable.SetNewRecordWorker(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception& deferredException)
   在 System.Data.DataRow.EndEdit()
   在 【FoxTable】.DataTable.O.o_00OO_.(Object A_0, DataColumnChangeEventArgs A_1)

System.Data.ConstraintException: 列“_Identify”被约束为是唯一的。值“106”已存在。
   在 System.Data.UniqueConstraint.CheckConstraint(DataRow row, DataRowAction action)
   在 System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction, Boolean fireEvent)
   在 System.Data.DataTable.SetNewRecordWorker(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception& deferredException)
   在 System.Data.DataRow.EndEdit()
   在 【FoxTable】.DataTable.O.o_00OO_.(Object A_0, DataColumnChangeEventArgs A_1)
[此贴子已经被作者于2020/11/21 3:41:27编辑过]

--  作者:有点蓝
--  发布时间:2020/11/21 9:42:00
--  
按住ctrl键打开项目,如果不行就是项目损坏了,使用备份,如果没有备份周一联系发给客服修复
--  作者:xiaoqiwei
--  发布时间:2020/11/21 14:22:00
--  
项目能打开,就是执行统计过程中有时正常 有时会报错
--  作者:有点蓝
--  发布时间:2020/11/21 14:51:00
--  
执行了什么代码?

有没有在异步线程里面设置表格数据?

--  作者:xiaoqiwei
--  发布时间:2020/11/21 15:42:00
--  
异步线程里没有做表格数据,应该是异步多表统计完后填充表数据时(填进临时表)
--  作者:有点蓝
--  发布时间:2020/11/21 16:15:00
--  
多个线程写一个临时表?这种肯定不行的。改为使用同步函数写入。
--  作者:xiaoqiwei
--  发布时间:2020/11/21 20:46:00
--  
异步执行多表统计,再同步将结果写入临时表,原本好好的,昨天win10打了补丁后就出现了异常,不知道是不是系统补丁导致的问题,昨天的win10家庭中文版补丁还删除了组策略,远程桌面也有异常,组策略和远程桌面已修复,就是不知道是不是该补丁也导致狐表异常
--  作者:有点蓝
--  发布时间:2020/11/22 20:17:00
--  
试试卸载.net重装一下
--  作者:xiaoqiwei
--  发布时间:2020/11/23 22:39:00
--  
问题已找到,在临时表使用ReplaceFor语句替换数据时有时会报那个错误 另外 PY.GetPY("部门", False, 3)有时会转换错,正确应该是bm,却有时转换出来的是 m ,部字没有转换出来(几率出错),还有其他的中文也是有机会没有转换成功。
--  作者:有点蓝
--  发布时间:2020/11/24 10:26:00
--  
我做了个计划管理,隔段时间就调用PY.GetPY("部门", False, 3)写入表格,新增了10W行记录,没有发现有问题。会不会是其它代码逻辑影响了?

ReplaceFor语句会不会在异步里使用?会不会有异步同时出现了新增和ReplaceFor的可能?