特
特尔斐
Unregistered / Unconfirmed
GUEST, unregistred user!
碰到一个很奇怪的问题:
COM+组件中的一个方法,其主要代码如下:
function TCoDataTransport.GetRecordSet(const DBIniSect,
SQLText: WideString;
var ErrText: WideString): IDispatch;
var
rs: Recordset;
con: Connection;
begin
try
con := CoConnection.Create;
con.Open(GetConnString(DBIniSect), '', '', adConnectUnspecified);
rs := CoRecordset.Create;
rs.CursorLocation := adUseClient;
rs.Open(SQLText, con, adOpenDynamic, adLockReadOnly, adCmdText);
rs.Set_ActiveConnection(nil);
Result := rs;
ErrText := '';
except
on E: Exceptiondo
ErrText := E.Message;
end;
end;
当客户端使用TDCOMConnection连接时,可以返回正确返回_RecordSet,其代码如下:
ADODataSet1.Recordset := IDispatch(DispConn.AppServer.GetRecordSet(...)) as _RecordSet;
但是,当客户端使用TSocketConnection连接时,使用与上面代码可提示:Interface not supported,转换失败。
似乎使用TSocketConnection连接时,其返回的IDispatch中并不包含接口信息。
有没有哪位大侠也遇到并解决了此问题?
COM+组件中的一个方法,其主要代码如下:
function TCoDataTransport.GetRecordSet(const DBIniSect,
SQLText: WideString;
var ErrText: WideString): IDispatch;
var
rs: Recordset;
con: Connection;
begin
try
con := CoConnection.Create;
con.Open(GetConnString(DBIniSect), '', '', adConnectUnspecified);
rs := CoRecordset.Create;
rs.CursorLocation := adUseClient;
rs.Open(SQLText, con, adOpenDynamic, adLockReadOnly, adCmdText);
rs.Set_ActiveConnection(nil);
Result := rs;
ErrText := '';
except
on E: Exceptiondo
ErrText := E.Message;
end;
end;
当客户端使用TDCOMConnection连接时,可以返回正确返回_RecordSet,其代码如下:
ADODataSet1.Recordset := IDispatch(DispConn.AppServer.GetRecordSet(...)) as _RecordSet;
但是,当客户端使用TSocketConnection连接时,使用与上面代码可提示:Interface not supported,转换失败。
似乎使用TSocketConnection连接时,其返回的IDispatch中并不包含接口信息。
有没有哪位大侠也遇到并解决了此问题?