sql >> Database >  >> RDS >> Mysql

Parameters gebruiken met ADO Query (mysql/MyConnector)

Ik zou proberen SQL.BeginUpdate/SQL.EndUpdate toe te voegen rond de Adds, anders wordt de SQL-tekst geparseerd telkens wanneer u "Add" aanroept.

Dit is over het algemeen een goed idee, aangezien ADOQuery.SQL een TStringList is met een OnChange-gebeurtenis die de CommandText instelt. SetCommandText-tekst roept vervolgens TADOCommand.AssignCommandText op, wat een behoorlijke hoeveelheid werk doet bij het parseren van parameters en het instellen van CommandObject.CommandText. Soms falen stuurprogramma's met gedeeltelijke SQL-instructies, maar dit ziet er goed uit.

Ik had jaren geleden een soortgelijk probleem - daarom leerde ik over dit soort dingen!

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;

Trouwens, de geneste with s zijn echt lelijk (laat de heilige oorlog beginnen)

Ik gebruik soms with , maar zou nooit drie niveaus nesten! Als dat zo is, verklein dan in ieder geval het bereik van met SQL zodat het eerder eindigt met Parameters.



  1. SQL*Plus-script genereren met SQL*Plus

  2. Goede manier om tabelalias te gebruiken in Update-instructie?

  3. Berichten en opmerkingen verwijderen uit Action Scheduler

  4. SQLSTATE[42000] Syntaxisfout of toegangsfout Rijgrootte te groot