我在用Asta控件(3.08)时有个问题,如下:
  我定义了一个ERPUser类,用GetPassword方法返回一个用户的密码:
function TERPUser.GetPassword(strName:string;ASocket:TAstaClientSocket;var intFlag:integer):string;
var DataSet:TAstaClientDataSet;
begin
  DataSet:=TAstaClientDataSet.Create(nil);
  DataSet.AstaClientSocket:=ASocket;
  try
    DataSet.SQL.Clear;
    DataSet.SQL.Add('SELECT 姓名, 部门, 职务, 别名, 密码, 权限 '+
          'FROM 用户表 where 别名 = "'+strName+'"');
    DataSet.Prepare;    DataSet.Open;
    intFlag:=0;
    if DataSet.RecordCount <> 0 then begin
      intFlag:=1;
      result:=DataSet.FieldValues['密码'];
    end;
  except
    intFlag:=-1;
  end;
  DataSet.Free;
end;
下面是调用代码:
    FClientSocket:=TAstaClientSocket.Create(nil);    FClientSocket.Address:=txtIP.Text;
    FClientSocket.Port:=StrToInt(txtport.Text);    FClientSocket.UserName:=txtName.Text;
    FClientSocket.Password:=txtPwd.Text;    FClientSocket.Active:=True;    // 检验密码
    FPersonal:=TERPUser.Create();
    strPwd:=FPersonal.GetPassword(FClientSocket.UserName,FClientSocket,intFlag);
    if intFlag<>1 then
      ShowAlarmMsg(MSG_ERR_NOUSER)
    else if strPwd<>FClientSocket.Password then
      ShowAlarmMsg(MSG_ERR_PWD)
    else
      close;
问题就是GetPassword里的DataSet.RecordCount始终是0。

解决方案 »

  1.   

    DataSet.RecordCount始终是0 说明没有查询到记录。所以建议你
    检查这条sql语句执行的结果,你可以直接在sql server2000里企业管理器里调试这条语句:
    'SELECT 姓名, 部门, 职务, 别名, 密码, 权限 FROM 用户表 where 条件  '
      

  2.   

    谢谢楼上的回复,我已经用过查询分析器了,是有记录的,而且我跟踪到'if DataSet.RecordCount <> 0 then begin'时,看到的SQL语句没什么问题,所以我怀疑是因为我对ASTA组件不太熟悉,是不是有什么东西没了解到,上面的代码没什么问题吗?