关于midas的无状态连接(200分)

F

fjx_jwf

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器端:adoconnection1+adodataset1+datasetprovider1
datasetprovider1的poallowcomandtext属性设为true;
客户端有两个tclientdataset分别为cdt1,cdt2 均联接到服务器端的datasetprovider1;
cdt1.comandtext:='select 序号,项目名称 from f00cxfatj';
cdt2.comandtext:='select 员工号,姓名 from f00rsjb';
现在的问题是
当我先cdt1.open, 在cdt2.open;然后修改cdt1中数据就报错,提示序号或项目名称没发现
反之cdt2.open,后在open cdt1 然后修改cdt2中数据报一类的错
我不明白 midas3.0后不是无状态连接了吗?难到非得客户端有一个clientdataset服务器端
就必须有一个datasetprovider吗?
那位能帮位讲明白一点吗?
 
如果 客户端 的 clientdataset 要同时打开,
就要求服务器端有多个对应的 datasetprovider
 
你這個個問題完全可以解決! 請看:
1.客戶端在BeforeApplyUpdates事件中將CommandText傳遞給服服器:
(cds1,cds2為你的兩個clientDataSet,它們都是通過commandText獲取數據)
procedure TForm1.cds1BeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
OwnerData:=cds1.CommandText;
end;

procedure TForm1.cds2BeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
OwnerData:=cds2.CommandText;
end;

2.服務器端對應的DataSetProvider在BeforeApplyUpdates事件中將對應的數據集打開,
AfterApplyUpdates之再關閉.(假設該數據集控件為一個叫CommQry的TADOQuery);
procedure TMasterRDM.CommProviderBeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
with CommQrydo
begin
Close;
SQL.Clear;
SQL.Add(VarToStr(OwnerData));
Open;
end;
end;

procedure TMasterRDM.CommProviderAfterApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
CommQry.Close;
end;

//注:以上寫法只適合在DataSetProvider的ResolveToDataSet應為True的情況下.
 
按你的提示,我觖决了,不过我在datasetprovider.resolvetodataset=false的情况下也解
决了,谢谢
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部