服务器端定义的Appserver接口函数:
function TDBSever.LogInDB(const username,
  password: WideString): WideString;
begin
  self.adcMain.Connected:=false;
   self.adcMain.ConnectionString:='Provider=SQLOLEDB.1;Password='+password+
    ';Persist Security Info=True;User ID='+username+';Initial Catalog=HisDataBase;Data Source=kjk';
  try
    self.adcMain.Connected:=true;
  except
    on E: Exception do
    begin
      result:='false';
      exit;
    end;
  end;
  result:='true';
end;客户端定义的调用函数:
procedure TfrmLogin.Button1Click(Sender: TObject);
var
  islogin:string;
begin
  islogin:=frmMain.dccSearch.AppServer.LogInDB('hisuser','1');//string(edtName.Text),string(edtPassword.Text));
  if islogin='true' then exit
  else
  begin
    Application.MessageBox('用户名或密码错误,请重新输入!','错误',MB_ICONEXCLAMATION);
  end;
end;结果运行时出错:Invalid variant operation.
请问是什么原因?

解决方案 »

  1.   

    服务器自定义函数的返回值可能只能是variant类型,不能显式地声明为WideString
      

  2.   

    上面的话仅供参考。
    创建自定义方法,可以 菜单-->View-->Type Library-->右击类名-->new method-->
      

  3.   

    不要听楼上乱说, 这个返回值是可以 WideString 的,你代码没问题, 看看 Connection 是否是连接上的, 这个不像 Cds, 会自动去打开连接
      

  4.   

    啊,原来我应该用 self.adcMain.Open;
    郁闷,一直没想过问题在这里..........
    大意了