用远程数据模块来做, 就不要自己来处理了!如果你真要自己处理的话, 那就这样, Result := AdoQuery.Recordset;在客户端就要用一个ClientDataSet 然后直接用 ClientDataSet.Data := 我没有试,
我在COM端是这样来封装的: function query(sqlstr:string):OleVariant; begin with adoquery do begin sql.clear; sql.add('select * from talbe where '+sqlstr); execsql; end; result:=adoquery.recordset; end;我把记录集返回给RESULT; 在客户端我要如何来引用这个记录集呢? 我想把COM端的记录集写到STRINGGRID中显示出来。 请详细指点~~~~~~~~~~~~~~~~~ 先谢过呀~~
事实上,Delphi的MIDAS已经替你做好了。
我试着用OLEVARIANT了,但不知道在客户端如何解包?
什么是MIDAS?
如果在COM中处理,又如何将指针传递给CLIENT呢?
Result:=Integer(Addr(yourObject));客户得到result后可以如下处理。
yourvar:^yourobject;
yourvar:=ptr(yourresult)
这样指针就传过来了。
我认为gaga_ghost(鬼王Gaga)不是根本得懂得指针。
试想,两台计算机上它们得指针可能一样吗?MIDAS得书很多,可以看看。
把数据集赋给Result。
即 result:=adoquery.recordset.
则在客户端如何来解呢?
请详细指点!!!!!
那就这样,
Result := AdoQuery.Recordset;在客户端就要用一个ClientDataSet
然后直接用 ClientDataSet.Data := 我没有试,
function query(sqlstr:string):OleVariant;
begin
with adoquery do
begin
sql.clear;
sql.add('select * from talbe where '+sqlstr);
execsql;
end;
result:=adoquery.recordset;
end;我把记录集返回给RESULT;
在客户端我要如何来引用这个记录集呢?
我想把COM端的记录集写到STRINGGRID中显示出来。
请详细指点~~~~~~~~~~~~~~~~~
先谢过呀~~
说的是有道理,但com好象是在同一台机器上运行的。是不是?
分布式的组件好象是DCOM或者是COM+啊?不知道有没有说错?
不同进程之间的内存不能互相访问。即便你使用In-process的COM组件,同样还是不能传递指针。不信就自己试试。
我一直是这样用的,从没有出现过问题。不过争论也没有什么用处。重要的是让楼主知道去怎么解决问题。
方法都说出来,大家就不象孔已己了嘛,呵呵。