Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie parametrów z zapytaniem ADO (mysql/MyConnector)

Spróbowałbym dodać SQL.BeginUpdate/SQL.EndUpdate wokół Adds, w przeciwnym razie tekst SQL będzie analizowany za każdym razem, gdy wywołasz "Add".

Ogólnie jest to dobry pomysł, ponieważ ADOQuery.SQL to TStringList, który ma zdarzenie OnChange, które ustawia CommandText. Tekst SetCommandText kończy się wywołaniem TADOCommand.AssignCommandText, który wykonuje sporo pracy przy przetwarzaniu parametrów i ustawianiu CommandObject.CommandText. Czasami sterowniki zawodzą z częściowymi instrukcjami SQL, ale to wygląda OK.

Miałem podobny problem wiele lat temu - dlatego dowiedziałem się o tym!

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, zagnieżdżone with są naprawdę brzydkie (niech rozpocznie się święta wojna)

Czasami używam with , ale nigdy nie zagnieżdżałby trzech poziomów! Jeśli tak, przynajmniej zmniejsz zakres z SQL, aby kończył się wcześniej z parametrami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL i PDO:Czy PDO::lastInsertId teoretycznie może zawieść?

  2. Jakiś sposób na wybór bez powodowania blokowania w MySQL?

  3. jak zaktualizować określone pole (kolumnę) wiersza o wartość autoinkrementacji tego wiersza z jakimś prefiksem w mysql?

  4. Zachowanie MySQL z ON DUPLICATE KEY UPDATE dla wielu unikalnych pól

  5. Błąd podczas ustawiania wartości właściwości; zagnieżdżony wyjątek to org.springframework.beans.NotWritablePropertyException: