在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

转载于:https://www.cnblogs.com/railgunman/archive/2010/11/26/1888304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值