苦恼的传递_RecordSet的问题(100分)

  • 主题发起人 主题发起人 isfine
  • 开始时间 开始时间
I

isfine

Unregistered / Unconfirmed
GUEST, unregistred user!
关于传递RecoordSet的问题!
我在MIDAS服务器上是这样做的。
1。通过Type Library 引入ADO库,即ADO原生接口(ADODB_TLB)
定义一个返回函数
function TSQLConnectDM.GetQueryData: _Recordset;
var
ConnStr: WideString;
begin
{ Create an ADO Recordset instance directly }
ConnStr := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=FDB_Educate;Data Source=KUGHJUGJ-6T0R3V;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=GUYGFIUY-1FOUF4';//SQL连接字符
Result := CoRecordSet.Create;//创建ADO原生接口
Result.CursorLocation := adUseClient;
Result.Open('st_dataBase', ConnStr, adOpenStatic,chOptimistic,adCmdTable);//查询并返回_RecordSet
end;

客户端:
procedure TQueryFrm.Button1Click(Sender: TObject);
var
aRec :_RecordSet;//ADODB_TLB._RecordSet原生接口
cDisp :ISQLConnectDMDisp;
begin
cDisp :=ISQLConnectDMDisp(IDispatch(MidasSkt.AppServer));//MidasSkt:TSocketConnection控件;
aRec :=cDisp.GetQueryData;//调用服务器返回_RecordSet;
// aRec :=ADODB_TLB._RecordSet(cDisp.GetQueryData);
showmessage(inttostr(aRec.RecordCount));//不加这行代码,可以调用服务器方法。无错误提示,加了后运行提示“灾难性故障”。

// aRec :=IUnknown(cDisp.GetQueryData) as _Recordset;//错误提示:interface not supported
// aRec :=IDispatch(cDisp.GetQueryData) as _Recordset;
//错误提示:interface not supported
end;

问题:在服务器也用过OleVariant和IDispatch来传递的_RecordSet,可在客户调用提示interface not supported错误
导入ADO库后,直接传递_RecordSet,可客户端调用后得到的aRec即_RecordSet不能使用.
不知到问题到底出在那里。。。苦恼了几天了。。
希望高人给于指点。
 
MidasSkt:TSocketConnection控件;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
问题就出在这里!改用TDCOMConnection就可以正常传递了。至于原因,我也清楚。
 
难道TSocketConnection不能这样作?可是用TDCOMConnection配置以及程序分发让人晕
 
能否详细说说原因?
 
多人接受答案了。
 
后退
顶部