在COM+中,如何传递一个Record,或一个Record数组?

在COM+中,如何传递一个Record,或一个Record数组?
(可以传递ADO的记录集吗?好像VB可以,但VB传递的记录集,Delphi可以用吗?)

 

当然可以
看看一下代码
1。定义一个结构
  ///////////////////自定义的欠费统计结构
  towe=record
    name:shortstring;
    fee0:shortstring;    //当月费用
    fee1:shortstring;   //total费用
  end;
  poweary=^toweary;
  toweary=array[0..20] of towe;
  powerecords=^towerecords;
  towerecords=record
     count:longint;
     oweary:toweary;
  end;
2。需要两个函数
function Tstat_acf.varianttoowerecords(v: olevariant): towerecords;
var
  p:pointer;
begin
  p:=vararraylock(v);
  move(p^,result,sizeof(towerecords));
  vararrayunlock(v);
end;
3。
服务端
function owestat:varaint;
begin
towerecords:=////给他附值
  v:=vararraycreate([0,sizeof(towerecords)],varbyte);
  P:=vararraylock(v);
  move(owerecords,p^,sizeof(towerecords));
  vararrayunlock(v);
result:=v;
end;
4。客户端接收
var
  v:variant;
v:=socketconn.AppServer.owestat(owedate);///返回统计值
owerecords:=varianttoowerecords(v); 

 

一般用clientdataset传递数据包
VB传递的记录集理论上可以被delphi接受,但你要在客户端(函数接受方)声明一个
这种类型的变量,你有办法声明吗?

 

可以;你可以将ADO的数据作为一个Variant类型的变量进行传送:
这是服务端的一个方法的代码:
function TADORec.getData: OleVariant;
begin
AdoDataSet1.Open;
result := adodataset1.RecordSet;
end;
客户端调用服务端方法的代码:
procedure TForm1.Button2Click(Sender: TObject);
var
vData : variant;
begin
DCOMConnection1.Connected := true;
vData := DCOMConnection1.Appserver.GetData;
AdoDataSet2.Recordset :=IUnknown( vData ) as _RecordSet;
end;
我想用VB传送的记录集Delphi应该也可以用,只要它用Variant类型的变量封装记录集。ADO的记录集跟使用的语言是无关的。 

来源:http://www.delphibbs.com/delphibbs/dispq.asp?lid=683222

posted @ 2010-11-26 00:36  覆雨翻云  阅读(700)  评论(0编辑  收藏  举报