首次登录尝试如果正确则有效,但如果不正确则其他正确尝试无效

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()