不知是不是dbExpress的BUG,请高手指点。 ( 积分: 50 )

  • 主题发起人 主题发起人 szkok
  • 开始时间 开始时间
S

szkok

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在用TSQLQuery + TDataSetProvider + TClientDate开发一个软件,因为数据记录多,有十来万,我将TClientDater的PacketRecords设为100,修改数据并提交(ApplyUpdates(0))时出错,不能完成所需的操作。但如果是将PacketRecords设为-1或完全将数据取过来时就不会出现这个情况,请教如何解决这个问题,因为我不可能将PacketRecords设为-1或将记录完全取过来后才修改记录。
谢谢!
 
我现在用TSQLQuery + TDataSetProvider + TClientDate开发一个软件,因为数据记录多,有十来万,我将TClientDater的PacketRecords设为100,修改数据并提交(ApplyUpdates(0))时出错,不能完成所需的操作。但如果是将PacketRecords设为-1或完全将数据取过来时就不会出现这个情况,请教如何解决这个问题,因为我不可能将PacketRecords设为-1或将记录完全取过来后才修改记录。
谢谢!
 
错误是什么?
 
"SQL Server Error"
 
两种可能:
1.如果PacketRecords设为100,说明应用服务器还要继续读表里的数据,这时候数据库是否已经把表锁定而不让修改,如果设为-1并取回纪录,说明这时表的读操作已经完成从而释放锁这是就可以修改纪录,这还是数据库锁的问题不是dbExpress的BUG.又或者TSQLQuery的属性要设置下,不知道TSQLQuery有没有TADOQuery.LockType相似的属性,你可以设置下看有没有用
2.第二种可能是纪录定位出了问题,因为TDataSetProvider不能根据修改的字段定位纪录从而不能修改,TDataSetProvider.UpdateMode:=upWhereAll设为最严格的定位方式试试看.
 
曾遇到相同的问题,最后重写了ApplyUpdates事件,在ApplyUpdates中用另一TSQLQuery来进行更新。
你还可以不用ApplyUpdates,另外自行处理。
 
Good Idea,thanks!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部