sql >> Database teknologi >  >> RDS >> Mysql

Brug af parametre med ADO Query (mysql/MyConnector)

Jeg ville prøve at tilføje SQL.BeginUpdate/SQL.EndUpdate omkring Tilføjerne, ellers vil SQL-teksten blive parset hver gang du kalder "Tilføj".

Dette er generelt en god idé, da ADOQuery.SQL er en TStringList, der har en OnChange-begivenhed, der sætter CommandText. SetCommandText-teksten ender derefter med at kalde TADOCommand.AssignCommandText, som udfører en del arbejde med at parse parametre og indstille CommandObject.CommandText. Nogle gange vil drivere fejle med delvise SQL-sætninger, men disse ting ser OK ud.

Jeg havde et lignende problem for mange år siden - det var derfor, jeg lærte om det her!

procedure TForm1.login();
var
  Qry : TADOQuery;
begin
  Qry := CreateSQL;
  try
    Qry.SQL.BeginUpdate;

    Qry.SQL.Add('SELECT');
    Qry.SQL.Add('  *');
    Qry.SQL.Add('FROM');
    Qry.SQL.Add('  LisenswebUsers');
    Qry.SQL.Add('WHERE UserName = :MyUsername '); // debugger exception here
    Qry.SQL.Add('  AND UserPassword = :MyPassword '); // debugger exception here

    Qry.SQL.EndUpdate;
    Qry.Parameters.ParamByName('MyUsername').value := txtLogin.text;
    Qry.Parameters.ParamByName('MyPassword').value := strmd5(txtPassword.text);
    Qry.Open;

    if Qry.Recordcount <> 1 then
    begin
      lblLoggedinAs.Text := format('Du er logget inn som: %s (%s)',[FieldByName('Username').AsString,FieldByName('UserEmailaddress').AsString]);
      MainPageControl.ActivePageIndex := 1;
    end
    else
    begin
      txtPassword.Text := '';
      txtPassword.SetFocus;
    end;
  finally
    Qry.Free;
  end;
end;

BTW, den indlejrede with s er virkelig grimme (lad den hellige krig begynde)

Jeg vil nogle gange bruge with , men ville aldrig indlejre tre niveauer! Hvis du er, skal du i det mindste reducere omfanget af med SQL, så det ender før med parametre.



  1. mySQL-fejl 1040:For mange forbindelser

  2. Få variabel i while-løkke baseret på, hvad brugeren vælger?

  3. Oracle.DataAccess er ikke tilgængelig for valg i Visual Studio 2013

  4. fejl:'Ugyldigt parameternummer:parameter blev ikke defineret' ved brug af et array til INSERT i PDO