delphixe登录错误
当我使用正确的用户名和密码登录我的应用程序时,最初我会收到错误用户名或密码的错误消息,然后下一次我单击“登录”按钮时,登录工作正常。我是一个德尔福爱好者,所以不要对我太苛刻delphixe登录错误,delphi,Delphi,当我使用正确的用户名和密码登录我的应用程序时,最初我会收到错误用户名或密码的错误消息,然后下一次我单击“登录”按钮时,登录工作正常。我是一个德尔福爱好者,所以不要对我太苛刻 type TfmLogin = class(TForm) pnlMain: TPanel; lblUserName: TLabel; SQLConnection: TSQLConnection; DataSource: TDataSource; ClientDataSet: TCl
type
TfmLogin = class(TForm)
pnlMain: TPanel;
lblUserName: TLabel;
SQLConnection: TSQLConnection;
DataSource: TDataSource;
ClientDataSet: TClientDataSet;
SQLQuery: TSQLQuery;
DataSetProvider: TDataSetProvider;
edtUserName: TEdit;
lblPassword: TLabel;
edtPassword: TEdit;
btnRegistration: TButton;
btnLogin: TButton;
SQLTable: TSQLTable;
procedure btnRegistrationClick(Sender: TObject);
procedure btnLoginClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmLogin: TfmLogin;
implementation
这是匹配函数
function MatchPass(Table : TSQLTable; const UserName, Password : string): Boolean;
begin
Result := Table.Locate('Username;Password', VarArrayOf([username,password]),[]);
end;
这是登录按钮程序
procedure TfmLogin.btnLoginClick(Sender: TObject);
var
UserName : string;
Password : string;
begin
UserName := edtUserName.Text;
Password := edtPassword.Text;
if(MatchPass(SQLTable, UserName, Password)) then //1.Why first time returns false
begin
with TfmMain.Create(nil) do
try
ShowModal; //3.And opens my main form
finally
free;
end;
end
else
ShowMessage('Wrong name or pass'); //2.And enters else and the second time returns true
end;
为什么不(从头开始):
procedure TLogin\u Form.按钮1点击(发送方:TObject);
开始
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Text:='从用户中选择[user]、[password],其中[user]='+QuotedStr(cxlookupcombobox1.Text)+'和[password]='+QuotedStr(cxtedit1.Text);
问题1.开放;
如果查询1.FieldByName('password')。关联字符串“”
然后开始
ModalResult:=mrOK;
结束其他
ModalResult:=mrNone;
您不需要匹配任何内容,因为密码无论如何都必须匹配。我们不太可能用这么少的信息来解释这一点。当然,解释的细节是我们看不到的。我们无法为您调试,因为正如@DavidHeffernan所说,问题一定在于我们看不到的东西。我建议您暂时将被拒绝的用户名和密码值添加到ShowMessage呼叫中。另外,当你们第一次调用SqlTable时,你们是否100%确定它是打开的?谢谢你们,除了注册按钮之外,这几乎是我的登录单元。注册表工作正常,并将字段正确插入数据库(自动增量id字段、用户名和密码)@MartynA SQLTable已从对象检查器选中为活动,登录单元中没有使用SQLTable的地方。请打开或关闭方法。在定位之前尝试刷新表。如
Table.Close;表1.打开;表.定位(…
@ValMarinov感谢您修复了我的问题。不使用参数发送用户名和密码是危险的。此外,根据数据库引擎的不同,此查询不区分大小写。您也可以使用参数而不是引号字符串,如:where user=:p1和password=:p2。然后只需传递参数即可。密码在中区分大小写几乎所有的数据库根据我的经验。。。。
procedure TLogin_Form.Button1Click(Sender: TObject);
begin
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Text:= 'select [user],[password] from users where [user] ='+QuotedStr(cxlookupcombobox1.text) +' and [password]='+QuotedStr(cxTextEdit1.Text);
Query1.Open;
if Query1.FieldByName('password').AsString<>''
then begin
ModalResult := mrOK ;
end else
ModalResult := mrNone;