不用delphi提供的TDataSetProvider和TClientDataSet,接口方法能返回的类型很多,但是只能返回VARIANT*类型,如果我要在将一个服务器段的对象传回给客户端,怎么实现,还是说这样做法本身就不能实现?服务器:
procedure TcoDBServer.getDate(var vResult: OleVariant);
var Conn: TADOConnection; rs: TmyADODataSet; rsp: TDataSetProvider;
begin
  CoInitialize( nil );//使用com对象初始化
  Conn := TADOConnection.Create(nil);
  rs := TADODataSet.Create(nil);
  Conn.ConnectionString := ' Provider=SQLOLEDB.1;Password=yourpassword; '
        +' Persist Security Info=True;User ID=yourusername;Initial Catalog=yourdatabase;Data Source=(local)';
  rs.Connection := Conn;
  Conn.Connected := true;  rs.CommandText := 'select * from table1';
  Conn.Connected := true;
  rs.Open;  vResult := Recordset.Fields.Item['field1'].Value;//这里要是能把对象传回去就好了  rs.Close;
  rs.Free;
  Conn.Free;
  CoUnInitialize;
end;客户端:
var coDBServer: IcoDBServer; vTemp: OleVariant;
begin
  CorbaInitialize;
  coDBServer := TcoDBServerCorbaFactory.CreateInstance('coDBServer');
  coDBServer.getDate(vTemp);
  Edit1.Text := vTemp;
end;//创建的对象实例能不能以某种数据类型保存,传递,然后动态创建并恢复数据?

解决方案 »

  1.   

    http://thecoadletter.com/article/0,1410,28502,00.html也許是你要的, corba我沒用過, 但我想也類似:
    function TRDSAppServer.Get_Employee: _Recordset;
    var
      ConnStr: WideString;
      CMD : _command;
      vRecsAffected, vParams: OleVariant;
      aConnection: _Connection;
    begin
      ConnStr := 'FILE NAME=' + DataLinkDir + 'DBDEMOS.UDL';
      aConnection := CoConnection.Create;
      aConnection.ConnectionString := ConnStr;
      aConnection.Open(ConnStr, '', '',-1);  
      CMD := CoCommand.Create;
      CMD.Set_ActiveConnection(aConnection);
      CMD.CommandType := adCmdText;
      CMD.CommandText := 'SELECT * FROM Employee WHERE EmpNo = :EmpNo';
      Result := CoRecordSet.Create;
      Result.CursorLocation := adUseClient;
      Result.CursorType := adOpenForwardOnly;
      Result.LockType := adLockOptimistic;
      vRecsAffected := -1;
      vParams := CMD.CreateParameter('EmpNo', adInteger, adParamInput, 0, 4);
      Result := CMD.Execute(vRecsAffected,vParams,adCmdText);
    end;
      

  2.   

    应该和普通的一样吧?CORBA和COM很类似的