当前位置:主页>仓库管理软件> 列表

在三层模式下DCOMconnection和socketco 找酒店管理软件下载

财务软件版1楼: //取得数据集
procedure Tdmf.GetClientData(sqlstr:string;ADOQuery:TADOQuery);
var mydata:oleVariant;
begin
//读数据包
DCOMConnection1.AppServer.getdata(sqlstr,mydata);
ADOQuery.Recordset:=IUnKnown(mydata) as _Recordset;
end;这段代码是用DCOMconnection连接应用服务器端,取得Recordset成功,我想用socketconnection替换时,ADOQuery.Recordset:=IUnKnown(mydata) as _Recordset;会报错,为什么?DCOMconnection和socketconnection在这里的应用有何不同?

2楼: 欢迎大家踊跃发表意见看法 如免费销售管理软件

3楼: 客户端取得了 OLEVariant包后,可直接用ClientDataSet.Data加载。
DCOM --> Distributed COM,分布式COM技术,可穿防火墙,稳定,但连接时较慢
Socket --> 通过 Borland的scktsrvr.exe通信,配置简单,使用方便。

4楼: 嗯,我是在尝试各种方法来实现数据查询、传输的高速性。
想用socketconnection来实现这样的数据传输,可是出现了问题,这个问题该如何解决?希望大家提出意见

5楼: DCOM還有中間層具有權限管理,但設置較麻煩。
同時只能在WIN平台上用、速度也慢。

6楼: //读数据包
DCOMConnection1.AppServer.getdata(sqlstr,mydata);
ADOQuery.Recordset:=IUnKnown(mydata) as _Recordset;
end;这段代码是用DCOMconnection连接应用服务器端,取得Recordset成功,我想用socketconnection替换时,ADOQuery.Recordset:=IUnKnown(mydata) as _Recordset;会报错,为什么?DCOMconnection和socketconnection在这里的应用有何不同?

财务软件版7楼: 你把用socketconnection寫的碼帖出來看下,才易於找問題。
其實它們之間區別有:采用的協議不一樣,還有就是支持的接口梆定方式dcom要多種。其它基本上差不多。

8楼: 是这样的
server:
procedure TMyCoCl.getdata(SqlStr: OleVariant; out vData: OleVariant);
var filename:string;
i:integer;
CompressedStream:TMemoryStream;
begin
if not ADOQ_query.Active then
begin
ADOQ_query.SQL.Text :=sqlstr;//sql语句
try
ADOQ_query.Open;
vData:=ADOQ_query.Recordset ; //保存数据集
finally
ADOQ_query.Close;
end;
end;
end;

client;
procedure Tdmf.GetClientData(sqlstr:string;ADOQuery:TADOQuery);
var mydata:oleVariant;
begin
//读数据包
socketConnection1.AppServer.getdata(sqlstr,mydata);
ADOQuery.Recordset:=IUnKnown(mydata) as _Recordset;
end;
这是客户端接受应用服务器端的数据,我想应该是socket支持接口绑定的问题。

还有就是用DCOM连接时的批保存问题,
server:
procedure TMyCoCl.UpdateData(var vData: OleVariant;
out ErrorMessage: OleVariant);
var filename:string;
begin
if ADOConnection1.InTransaction then
begin
ErrorMessage:=''保存错误'';
exit;
end;
try
ADOConnection1.BeginTrans; //开始事务
ADOQ_update.Recordset:=IUnKnown(vData) as _Recordset;
ADOQ_update.UpdateBatch(arAll); //保存
//回传数据
vData:=ADOQ_update.Recordset ;
ADOConnection1.CommitTrans; //提交事务
except
{出错处理}
end;
ADOQ_update.close;
end;

client:
//保存数据
procedure Tdmf.SaveData(var ADOQuery:TADOQuery;var ErrorMessage:string);
var vData:OleVariant;
Errorstr:variant;
filename:string;
begin
vData:=ADOQuery.Recordset ;
DCOMConnection1.AppServer.UpdateData(vData,Errorstr);
if Errorstr<>'''' then
ErrorMessage:=Errorstr
else
begin
ErrorMessage:='''';
//回传数据
ADOQuery.Recordset:=IUnKnown(vData) as _Recordset;
end;
end;
ADOQ_update.UpdateBatch(arAll); 此句失效
应用服务器端不能更新到数据源,问题在哪里?是Recordset这种方式本身不能这样用嘛?

9楼: 发错了

10楼: 建议在中间层放一个ClientDataSet,指向ADOQuery绑定的Provider,
然后直接返回ClientDataSet.Data。

11楼: 帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!

12楼: 我这段程序目的就是为了避开直接返回ClientDataSet.Data,因为有时这样的数据量过大,传输速度会很慢的。 如酒店管理软件下载

13楼: 直接用Provider

财务软件版14楼: 我也注意到这个问题,没有解决.用DCOM就可以,socktsvr不可以.

15楼: 帮顶!



╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯

16楼: 多人接受答案了。