三层中如何实现事务处理(100分)

  • 主题发起人 主题发起人 whitewolfxp
  • 开始时间 开始时间
W

whitewolfxp

Unregistered / Unconfirmed
GUEST, unregistred user!
服务端用了一个ActiveX工程,添加了一个Remote Data Module,在里面使用的是zeoslib组件库,数据库采用SQLite。
一个TZConnection和五个TZQuery(因为有五张表),五个TDataSetProvider,分别一一建立了关联。客户端操作数据正常。DataSetProvider的ResolveDataSet=false
但因为没有使用事务处理,所以,在批量添加数据时,速度很慢,为了提高性能,分别做了如下两种测试。
一、在服务端建立了三个方法以供客户端调用,StartTransaction,Commit,Rollback。客户端调用这三个方法均报错,提示事物启动期间无法再启动事务,好像是因为TDataSetProvider自己做了显示事务处理。将DataSetProvider的ResolveToDataSet设为True,客户端再调用这三个方法,均不报错,但,数据却没有被正常地更新到服务端中。
据说要将TZQuery改为TZTable,或是设置一个TZUpdateSQL,但,经我测试,均无效。
二、在服务端定义一方法ApplyDatas(custvar: OLEVariant),在这个方法里实现事务处理,参数是客户端发送过来的DataSet,而客户端在调用的时候,却报SQL error,修改服务端后,不报SQL error,但数据依然更新不到服务端,经检查,TClientDataSet在被修改过数据后,Delta和Data中依然为null,不知是何缘由。
请各位大虾不吝赐教。如果有更好实现事务处理的方法或是加快数据库操作速度的方法也行,请大伙告诉我。谢谢!!!
 
数据库使用存储过程,在里面做事务处理!
比服务端做事务处理,更合理,效率也高!
 
关键数据库中还存在BLOB字段,要用SQL语句或是存储过程不知如何做。
 
第二种要好些。出现问题可能是你的中间层没有控制好,也可能是你的表结构限制的,
 
SQLite是不支持存储过程的。
 
后退
顶部