sql >> Databasteknik >  >> RDS >> Mysql

Använda parametrar med ADO Query (mysql/MyConnector)

Jag skulle försöka lägga till SQL.BeginUpdate/SQL.EndUpdate runt Adds, annars kommer SQL-texten att tolkas varje gång du anropar "Add".

Detta är generellt sett en bra idé, eftersom ADOQuery.SQL är en TStringList som har en OnChange-händelse som ställer in CommandText. SetCommandText-texten hamnar sedan i att anropa TADOCommand.AssignCommandText som gör en hel del arbete med att analysera parametrar och ställa in CommandObject.CommandText. Ibland misslyckas drivrutiner med partiella SQL-satser, men det här ser OK ut.

Jag hade ett liknande problem för många år sedan - det var därför jag lärde mig om det här!

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 kapslade with s är riktigt fula (låt det heliga kriget börja)

Jag kommer ibland att använda with , men skulle aldrig bygga tre nivåer! Om du är det, minska åtminstone omfattningen av med SQL så att den slutar före med Parametrar.



  1. Syftet med att använda olika typer av PL/SQL-samlingar i Oracle

  2. Hur implementerar man ljus Entity-version med Jpa-förvaret?

  3. Hur lagrar man formaterad text i MySQL-tabellen?

  4. Fel i SQL Server vid import av CSV-fil trots att varchar(MAX) används för varje kolumn