如何更新多个表?(200分)

  • 主题发起人 主题发起人 DTHL
  • 开始时间 开始时间
D

DTHL

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾!
以下的环境是在C++Builder4中
Question 1. 在Midas中如何使用TProvide?
说明:因为TDataSetProvide会将Client端传来的数据直接传入DataSet,这样我就可以
使用UpdateSQL来支持同时更新多个表。而且用TDataSetProvide时它不会自己
使用事务。本来用得好好的,可是我个查询要用Params,我查过Help后得知,
有TProvide支持FetchParams(),然而TProvide不能使用UpdateSQL,它自己直接
启动事务,然后修改Database Server中的数据。即使将ResolveToDataSet 设为
true也没有用,还是自己启动事务,而且如果相应的DataSet用了UpdateSQL,那它
根本就不更新Database Server,即使在Query中用了ApplyUpdate()也没有用!
555555555 这样我就没有办法控制了!有什么办法解决这个问题呢?我自己想到一个
就是用Methods来传自己想要的Params,这就引出Question 2
Question 2. 如何在Midas中的Server端增加Methods用来读写Variant类型的数据?
说明:因在Server端的Methods的参数是TVariant * V0,TVariant *V1;
本来要返回数据时用 *V0=MyData;
//本意用来返回Variant到Client端
可是当MyData为Variant类型时Compiler出错!为什么?
而Variant MyVariant=*V1;
//本意为用来取得客户端传来的Variant类型数据
也同样不能正确得到客户端传来的数据,为什么?

55555555555555555,泪如雨下,白忙了一天。
 
试试TBDEDataSet.OnUpdateRecord事件, 在那里进行数据库的写入.
 
把MyData由Variant类型换成OleVariant类型试一试。
关注。
 
跳过Provider和DataSetProvider,直接将Query Export
 
看了半天还是没懂什么意思,我曾经用以下方法作多表更新
希望能给你启发.
const CDSCount=22;//"子包"的数量
var
DataSave:IDataSave;//S端的接口变量,在你S端的XXXX_TLB.pas中声明
vDeltas:OleVariant;
iIndex:integer;
begin
SaveInit;作些你的准备工作
vDeltas:=VarArrayCreate([0,CDSCount], varVariant);//生成动态数组
iIndex:=-1;
dmGenInfo.CreateDeltas(iIndex,vDeltas);
dmBaoxian.CreateDeltas(iIndex,vDeltas);
dmGoods.CreateDeltas(iIndex,vDeltas);
//以上为将delta打包到大包vDeltas的过程.
DataSave:=CoDataSave.CreateRemote(S端计算机名);
DataSave.update(vDeltas,0);//save为自定义的方法
end;
S端Demo
Update方法可以如下:
var
v:OleVariant;
ID,desc1,desc2:String;
begin
v:=CreateOleObject('EntityMnt.Entity');//生成本地com,此com用于你的大数据更新;
v.Update(传过来的大包变量);//用于"修理"你的大库(此处应用事务保证更新的连贯)
end;
 
1、客户端:
var data:olevariant;
begin
if not remoteserver1.connected then
remoterserver1.connected:=true
remotexerver1.apserver.select(memo1.lines.text,data);
clientdataset1.data:=data;
end;
2、服务器端定义select
procedure ~.select(conset sqlstr:widestring;outdata:olevariant);
begin
query1.sql.text:=sqlstr;
data:=query1.provider.data;
end;
 
多人接受答案了。
 
后退
顶部