首次登录尝试如果正确则有效,但如果不正确则其他正确尝试无效
First login attempt works if it's correct, but if it's incorrect then other correct attempts don't work
void __fastcall TFormLogin::btnLoginClick(TObject *Sender)
{
UnicodeString query = "select * from admin where korisnickoIme = '" + editKorisnicko->Text +
"' AND lozinka = '" + editLozinka->Text + "'";
AnsiString ansiQuery = query;
ADOQuery1->ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KnjiznicaManagement;Data Source=KUKICRO\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KUKICRO;Use Encryption for Data=False;Tag with column collation when possible=False";
ADOQuery1->SQL->Add(ansiQuery);
ADOQuery1->Prepared = true;
try
{
ADOQuery1->Active = true;
}
catch (EADOError& e)
{
MessageDlg("Error spajanja", mtError,
TMsgDlgButtons() << mbOK, 0);
return;
}
TDataSource* Src = new TDataSource(this);
Src->DataSet = ADOQuery1;
Src->Enabled = true;
if(Src->DataSet->RecordCount < 1){
labelPrijava->Visible = true;
ADOQuery1->Prepared = false;
Src->Enabled = false;
try{
ADOQuery1->Active = false;
}
catch (EADOError& e){
MessageDlg("Error odspajanja", mtError,
TMsgDlgButtons() << mbOK, 0);
}
return;
}
FormMain->labelUlogiran->Caption = Src->DataSet->FieldByName("korisnickoIme")->AsString;
FormLogin->Close();
}
上面的代码是我的 OnClick
按钮事件代码。它应该模拟从数据库 table“admin”登录,该数据库在用户名字段中包含“korisnickoIme”,在密码字段中包含“lozinka”。当我输入正确的用户名和密码时,第一次尝试有效,但如果我输入错误的用户名和密码,然后输入正确的用户名和密码,它就不起作用。当我使用调试器时,最后一个 if
是正确的,但它不应该是。
这一行:
ADOQuery1->SQL->Add(ansiQuery);
将 ansiQuery
添加到 ADOQuery
的 SQL 集合的末尾。当你第二次点击按钮时,新的查询被添加到最后,但原来错误的查询仍然在集合的开始,所以它是运行在前。
解决方案:在每次单击按钮时清除集合。在 Add
行之前添加以下内容:
ADOQuery1->SQL->Clear()
void __fastcall TFormLogin::btnLoginClick(TObject *Sender)
{
UnicodeString query = "select * from admin where korisnickoIme = '" + editKorisnicko->Text +
"' AND lozinka = '" + editLozinka->Text + "'";
AnsiString ansiQuery = query;
ADOQuery1->ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KnjiznicaManagement;Data Source=KUKICRO\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KUKICRO;Use Encryption for Data=False;Tag with column collation when possible=False";
ADOQuery1->SQL->Add(ansiQuery);
ADOQuery1->Prepared = true;
try
{
ADOQuery1->Active = true;
}
catch (EADOError& e)
{
MessageDlg("Error spajanja", mtError,
TMsgDlgButtons() << mbOK, 0);
return;
}
TDataSource* Src = new TDataSource(this);
Src->DataSet = ADOQuery1;
Src->Enabled = true;
if(Src->DataSet->RecordCount < 1){
labelPrijava->Visible = true;
ADOQuery1->Prepared = false;
Src->Enabled = false;
try{
ADOQuery1->Active = false;
}
catch (EADOError& e){
MessageDlg("Error odspajanja", mtError,
TMsgDlgButtons() << mbOK, 0);
}
return;
}
FormMain->labelUlogiran->Caption = Src->DataSet->FieldByName("korisnickoIme")->AsString;
FormLogin->Close();
}
上面的代码是我的 OnClick
按钮事件代码。它应该模拟从数据库 table“admin”登录,该数据库在用户名字段中包含“korisnickoIme”,在密码字段中包含“lozinka”。当我输入正确的用户名和密码时,第一次尝试有效,但如果我输入错误的用户名和密码,然后输入正确的用户名和密码,它就不起作用。当我使用调试器时,最后一个 if
是正确的,但它不应该是。
这一行:
ADOQuery1->SQL->Add(ansiQuery);
将 ansiQuery
添加到 ADOQuery
的 SQL 集合的末尾。当你第二次点击按钮时,新的查询被添加到最后,但原来错误的查询仍然在集合的开始,所以它是运行在前。
解决方案:在每次单击按钮时清除集合。在 Add
行之前添加以下内容:
ADOQuery1->SQL->Clear()