Midas三层结构,事务处理的问题,高手一定请帮忙!!!

grouse 2004-08-31 02:53:30
应用服务器增加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能实现事务处理吗?
...全文
151 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesry 2004-09-17
  • 打赏
  • 举报
回复
会不会是if (!vCustVar.IsNull())不满足?

if (CustVar.vt!=VT_NULL)
{
OleVariant& vCustVar = *(reinterpret_cast<OleVariant*>(CustVar));
...


这阵子用3层的比较多嘛,看来我要专攻这个。
thp 2004-09-14
  • 打赏
  • 举报
回复
ljianq 2004-08-31
  • 打赏
  • 举报
回复
你不需要再启动事务了,因为方法已经处于事务状态了。
grouse 2004-08-31
  • 打赏
  • 举报
回复
问题解决,自己笨,抄书都能抄错,现问题更正:

STDMETHODIMP TSamAppImpl::ApplyUpdates(VARIANT* CustVar)
{
int ErrCount = 0;
m_DataModule->Oracle->BeginTrans();

try{
OleVariant& vCustVar = *(reinterpret_cast<OleVariant*>(CustVar));
if (!vCustVar.IsNull())
{
ErrCount = 0;
m_DataModule->DSP->ApplyUpdates(vCustVar, 0,ErrCount, vCustVar);

客户端同上不变,为什么操作到ApplyUpdates方法时会提示"Invaild data packet"?
客户端提交数据的语句为

OleVariant CustVar;
srvr.ApplyUpdates(reinterpret_cast<VARIANTOBJ*>(&CustVar));

应该没错啊~~~~~~~~高人来救命~~~~~~~~~~~~~

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧