COM+问题!如何把要保存的数据记录传递给COM+????请前辈们帮助一下!谢谢

westdiamond 2003-05-15 06:36:09
如何把要已修改的数据记录传递给COM+,然后在COM+中编写代码进行保存数据???
我一般只会在COM+中使用OleVarint变量来转换!可不知如何传递数据到COM+中?是不是也是这中方法?
一般你们采取什么方式?如何做的?谢谢指教!
...全文
5 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
westdiamond 2003-05-19
果子,再来帮我看看啊!
回复
eastliangliang 2003-05-19
QQ上不了,MSN自然也上不了,端口都被公司封了,我也快疯了。
回复
westdiamond 2003-05-19
好了,我结帖了!
回复
westdiamond 2003-05-19
对了,果子!QQ上不了,可以用MSN啊!试试看啦!
MSN:westwg@hotmail.com
回复
westdiamond 2003-05-19
果子,这两天很忙吗?

干这行还会轻松啊!不可能!累就累了!该轻松的时候还是要多休息休息!
回复
eastliangliang 2003-05-19
累的都快虚了,唉,没心思看帖子啦。
XML是可以自己定义数据格式,你也可以用结构体或类来试试看能不能传,总之,两边都知道怎么取数据和存数据就行啦。实在不行就用MIDAS吧,Borland帮你封好了包了,不过没有Delphi的控件,你自己打不开。
回复
simonzone 2003-05-17
嘿嘿.
回复
virtualmfc 2003-05-17
在这里,我们要知道一点,即TClientDataSet具有双重性。如果你所做的系统不需要穿过防火墙,那么使用TClientDataSet的Data二进制数据包即可,否则使用XmlData数据包就可以搞定了,要知道,XML是很庞大和缓慢的,不要什么时候都使用XML,看情况而定。
回复
eastliangliang 2003-05-17
这两天把脚扭了,头让我放假,呵呵,说了一句就休息去啦。
楼上说得可能有道理,原生数据集在COM+的各层传递时确实有问题,至少我没试成功,于是我在数据访问层把读出的记录集用它的一个方法转换成XML字符串,字符串总可以传递吧,然后在用的时候转换成记录集。
不对,这是往外读,你要往里写,用可变数组可以,可是我基本功太差,写的数组类总是出毛病,于是我又用XML封装了二维可变数组的操作。给你个源码,这下可以拿分了吧:)

unit unitArrayWithXML;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
Mtsobj, Mtx, ComObj, ActiveX, ArrayWithXML_TLB, StdVcl,XMLDoc, XMLIntf,
xmldom, msxmldom, Classes;

type
TArrayWithXML = class(TMtsAutoObject, IArrayWithXML)
private
Owner:TComponent;
myxmldoc:Txmldocument;
myxmlNode:Ixmlnode;
insertnode:Ixmlnode;
protected
procedure Add(const fieldName, fieldValue: WideString); safecall;
procedure GetByIndex(index: Integer; out fieldName,
fieldValue: WideString); safecall;
function GetByFieldName(const fieldName: WideString): WideString; safecall;
procedure SetValue(const inData: WideString); safecall;
function GetValue: WideString; safecall;
function GetNodeCount: Integer; safecall;
procedure Clear; safecall;
{ Protected declarations }
public
procedure Initialize;override;
destructor Destroy;override;
procedure OnActivate;override;
end;

implementation

uses ComServ, SysUtils;

procedure TArrayWithXML.Add(const fieldName, fieldValue: WideString);
begin
try
self.insertnode := self.myxmlNode.AddChild(LowerCase(fieldName));
self.insertnode.Text := fieldValue;
except
raise exception.Create('Error in Add to XML!向XML添加数据错误!');
end;
end;

procedure TArrayWithXML.GetByIndex(index: Integer; out fieldName,
fieldValue: WideString);
begin
try
self.insertnode := self.myxmlNode.ChildNodes.Get(index);
fieldName := self.insertnode.NodeName;
fieldValue := self.insertnode.NodeValue;
except
raise exception.Create('Error in GetByIndex!从XML中读数据错误!');
end;
end;

function TArrayWithXML.GetByFieldName(
const fieldName: WideString): WideString;
begin
result := self.myxmlNode.ChildNodes[LowerCase(fieldName)].Text;
end;

procedure TArrayWithXML.SetValue(const inData: WideString);
begin
try
self.myxmldoc.Active := false;
self.myxmldoc.XML.Text := inData;
self.myxmldoc.Active := true;
myxmlnode := myxmldoc.DocumentElement;
except
raise exception.Create('Error in SetValue!给XML赋值错误!');
end;
end;

function TArrayWithXML.GetValue: WideString;
begin
result := self.myxmldoc.XML.Text;
end;

function TArrayWithXML.GetNodeCount: Integer;
begin
result := myxmlnode.ChildNodes.Count;
end;

destructor TArrayWithXML.Destroy;
begin
Owner.Free;
inherited;
end;

procedure TArrayWithXML.Initialize;
begin
inherited;
Owner := TComponent.Create(nil);
self.myxmldoc := Txmldocument.Create(self.Owner);
with myxmldoc.XML do
begin
add('<?xml version="1.0" encoding="gb2312"?>');
add('<VariantArray></VariantArray>');
end;
myxmldoc.Active := true;
myxmlnode := myxmldoc.DocumentElement;
self.Pooled := true;
end;

procedure TArrayWithXML.Clear;
begin
self.myxmldoc.XML.Clear;
with myxmldoc.XML do
begin
add('<?xml version="1.0" encoding="gb2312"?>');
add('<VariantArray></VariantArray>');
end;
myxmldoc.Active := true;
myxmlnode := myxmldoc.DocumentElement;
end;

procedure TArrayWithXML.OnActivate;
begin
inherited;
self.Clear;
end;

initialization
TAutoObjectFactory.Create(ComServer, TArrayWithXML, Class_ArrayWithXML,
ciMultiInstance, tmNeutral);
end.
回复
westdiamond 2003-05-17
针对数据库添加、修改、删除功能!我想把已添加、修改和删除的记录暂时保存在客户端,待客户端保存数据时统一发送到服务端COM+!由服务端来保存和处理所有数据!那么发送的数据以XML方式发送,怎么发!?需要转换吗?是不是直接把XML发送到服务端?XML我没用过啊!!果子,再帮我分析分析!我希望保存数据的方式越简单越好!:)

—————————————————————————————————
┏━★━━◆━━★━┓
♂欢|◢CSDN◣|使♂        ▲自由保存帖子,浏览,关注检测
┃迎|◥论坛助手◤|用┃        ▲完善的CSDN客户端工具
┗━☆━━◇━━━☆┛       ▲自动添加签名......

让你更快,更爽,更方便地上CSDN...
http://www.csdn.net/expert/topic/573/573604.xml
http://www.chinaok.net/csdn/csdn.zip
回复
eastliangliang 2003-05-17
好惨,马上又要加班,星期一就要,真TMD急。
QQ也不能上啦,告诉我非QQ会员不能用HTTP,faint
回复
westdiamond 2003-05-17
果子兄,你好可爱哦!哈哈!
回复
virtualmfc 2003-05-16
引言:传统的COM+编程中,需要传递的还是数据集,可是如果你使用原生数据集的话,不能在COM+的各层中传递,
因此在ADO 2.1以上引入了离线数据集。

Delphi:强力推荐使用TClientDataSet,它完全内存数据表的结构极适合于在组件间传递数据,仅仅Data包便既有
元数据,又有数据集合,而且天生离线。吐血推荐!!!
回复
westdiamond 2003-05-16
哪位高人能来细说一下!??果子,说这几句就想拿分啊?:)
回复
westdiamond 2003-05-15
怎么传啊?说清楚点撒!
回复
eastliangliang 2003-05-15
传参数,传数组,传XML字符串,都可。
回复
相关推荐
发帖
网络通信/分布式开发
创建于2007-08-02

1573

社区成员

Delphi 网络通信/分布式开发
申请成为版主
帖子事件
创建了帖子
2003-05-15 06:36
社区公告
暂无公告