急!急,三层数据库的更新问题,本人出500分,请帮忙!(200分)

  • 主题发起人 主题发起人 czhysj
  • 开始时间 开始时间
C

czhysj

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI5.0的三层结构中,我在后台DBMS使用SQL SERVER 7.0,
其中有三个表,如下:
(一)产品表
字段为:产品编号,产品名称,产品总数
如: A01 车狗仔 500
A02 毛毛玩具 1300
(二)产品详细信息表
字段为:产品编号,产品序号,目前产品己完成数
A01 001 100
A02 002 500

(三)产品工作情况表
字段为:工人编号,产品编号,产品序号,工作数量
9908 A01 001 30
9909 A01 001 70
因为我还有第三个及第四个表一起编辑,
所以不能把"产品工作情况表,产品详细信息表"做成
主明细表放在一个DATASETPROVIDER进行插入,修改,删除等操作,
请问我在应用服务器端和客户端应该怎么设置(分别用哪些控件)才能
在一个事务里面对这几个表进行"插入,修改,删除"等更新操作,注意是
在一个事务里面对这些表操作,希望能给我一个范例(czh163e@163.net),
在此小弟不胜感激?
 
我的意见:
从数据库中按你的需要把这几个表关联取到客户端,
这样你可以在客户端随意对数据进行操作。你在中间层服务器控制客户端传上来的数据,
(在Provider的BeforeUpdateRecord事件中写代码,根据Delta里的内容分别对这几个表进行更新,
将Applied设为true就行了)。
关于在一个事务中控制它们,你只需要在BeforeUpdateRecord事件中。调用ADOConnect或Database的事务控制就行了.
当然,你也可把事务控制放到客户端。

 
建几个Com对象分别处理对小表的存取操作。
然后建一个协调对象来协调处理具体事务。
李维的书里面就是这样建议的,效率确实会高些。
 
看看李维的书,里面讲的很详细,象newlkf讲的一样!
 
tanglu,ericoo请问应该看李维的那本书,能否给我一个实例过程?
 
李维的《Delphi4.x实战篇 1,2》,Delphi 5.x 的MIDAS篇
 
我找不到这些书,请问如果有几个表不能建立关联而必须在一个事务中处理更新完毕,
我应该怎么做?
 
假如你在服务端用的是ADOConnection.
你可以在服务端实现几个事务的方法(使用的ADOConnection事务控制)由客户端调用。
客户端更新前调用StartTrans().成功调用Commit(),否则RollBack()
例如:
STDMETHODIMP TdmServerImpl::StartTrans(TVariant* Result)
{
try
{
if (!m_DataModule->ADOConnection1->InTransaction)
{
m_DataModule->ADOConnection1->BeginTrans();
*Result = (TVariant)trSuccess;
}
else
*Result = (TVariant)trNoTrans;
}
catch(Exception &e)
{
LogErr("TOPRegisterServerImpl", "StartTrans", e.Message);
*Result = (TVariant)trError;
return S_FALSE;
}

return S_OK;
}
 
czhysj:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
多人接受答案了。
 
后退
顶部