我在用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。
我定义了一个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。
检查这条sql语句执行的结果,你可以直接在sql server2000里企业管理器里调试这条语句:
'SELECT 姓名, 部门, 职务, 别名, 密码, 权限 FROM 用户表 where 条件 '