word中activex控件_activex控件 插件_使用activex控件(6)

电脑杂谈  发布时间:2017-05-09 15:09:29  来源:网络整理

P := VarArrayLock(Result); //Data: TDataType为你要传的记录类型

Move(Data, P^, SizeOf(TDataType)); // 把Data的值传给P指向的变体类型

finally

VarArrayUnLock(Result);

end;

end;

3>、客户端:

procedure GetFile(const FileName: string);

var

P: Pointer;

V: OleVariant;

Data: TDataType;

begin

FillChar(Data, SizeOf(Data), 0);

V := SocketConnection1.AppServer.GetData;

try

P := VarArrayLock(V);

Move(P^, Data, SizeOf(Data));

finally

VarArrayUnLock(V);

end;

end;

9、Com+中传递记录集

服务器端:

Uses ADOInt;

你可以将ADO的数据作为一个Variant类型的变量进行传送:adodataset1.RecordSet这是原生的ado数据

这是服务端的一个方法的代码:把CodeSet的类型改为Variant*[in,out]

function TADORec.getData: OleVariant;

begin

AdoDataSet1.Open;

result := adodataset1.RecordSet;

end;

//可以将ADO的数据作为一个Variant类型的变量进行传送:adodataset1.RecordSet这是原生的ado数据

客户端

uses adoint;

var

MyRecordset :_recordset;

begin

MyRecordset := IUnknown(CodeSet) as _recordset

End;

10、Com有需要研究和有疑问的地方:

1、Com+的模式:

2、到Com+的资源Pooling机制

3、用delphi6 开发Com+,用Neutral模式,尽量用Object Pooling,当然就是要无状态了,事务要尽量短,避免死锁,用ADO不要用BDE.Dbexpress等.

4、我的做法是,按功能划分组件,把查询和更新分为两个功能组件,因为查询不需要事务,所以只要支持事务就行了。更新一般需要事务。

5、COM+的事务属性 COM+的事务默认级别是序列 Read,而不是我们认为的commit Read,而且我们设置AdoConnection的隔离级是不管用的,只能强制用显式的SQL才能起效果。例如: 一个中间层COM :select * from a where py_code like 'S%' 继续下面有很多代码;另一个中间层COM: update a set py_code=py_code where py_code like 'B%'; 这时这个COM将会死锁等待,虽然改动的不是一个数据也会死锁 用Commit Read 或UnCommit Read不会建议: 所以被多个子系统更新或读的表,要在最后打开和更新,不要早。另外可以强制改变ADOCONNECTION的隔离级

6、Com+中如何进行事务处理? 在COM+中,如何使用SetComplete和SetAbort进行事务管理?SetComplete和SetAbort怎么能在客户端调用呢?这样肯定是不行的。要保证事务,就在服务器端声明一个专门保存的接口方法,例如:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-46133-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...