Midas三层结构,事务处理的问题,高手一定请帮忙!!!
应用服务器增加ApplyUpdates方法,实现如下:
STDMETHODIMP TSamAppImpl::ApplyUpdates(VARIANT* CustVar)
{
int ErrCount = 0;
SamApp->Oracle->BeginTrans();
try{
OleVariant& vCustVar = *(reinterpret_cast<OleVariant*>(CustVar));
if (!vCustVar.IsNull())
{
ErrCount = 0;
SamApp->DSP->ApplyUpdates(vCustVar, 0,ErrCount, vCustVar);
if (ErrCount > 0)
Error("Error in ApplyUpdates", IID_ISamApp);
}
SamApp->Oracle->CommitTrans();
}
catch(Exception &e) {
SamApp->Oracle->RollbackTrans();
return Error(e.Message.c_str(), IID_ISamApp);
}
return S_OK;
}
说明:Oracle为ADOTable,连接Oracle数据库;DSP为DataSetProvider控件;SamApp为TCRemoteDataModule
客户端提交记录程序如下:
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
OleVariant CustVar;
DM->CDS->CheckBrowseMode();
if (DM->CDS->ChangeCount > 0)
CustVar = DM->CDS->Delta;
else
CustVar.ChangeType(VT_NULL);
try{
ISamcomAppDisp srvr;
srvr.Bind(LPDISPATCH(DM->DCOM->AppServer));
srvr.ApplyUpdates(reinterpret_cast<VARIANTOBJ*>(&CustVar));
ShowMessage("OK");
}
catch(Exception &e){
Application->ShowException(&e);
}
}
说明:DM为DataModule;CDS为ClientDataSet;
问题:客户端修改记录,按提交后发现记录没有进入数据库,通过调试应用服务器端程序发现程序在
SamApp->Oracle->BeginTrans();
就跳出了,根本没有提交数据,更谈不上事务处理了。请问诸位高手,该如何解决?Midas能实现事务处理吗?