sql >> データベース >  >> RDS >> Mysql

ADOクエリでのパラメータの使用(mysql / MyConnector)

    Addsの周りにSQL.BeginUpdate/SQL.EndUpdateを追加してみます。そうしないと、「Add」を呼び出すたびにSQLテキストが解析されます。

    ADOQuery.SQLはCommandTextを設定するOnChangeイベントを持つTStringListであるため、これは一般的に良い考えです。次に、SetCommandTextテキストは、パラメータを解析し、CommandObject.CommandTextを設定するかなりの量の作業を行うTADOCommand.AssignCommandTextを呼び出すことになります。ドライバーが部分的なSQLステートメントで失敗することがありますが、これは問題ないように見えます。

    私は何年も前に同様の問題を抱えていました-それが私がこのことについて学んだ理由です!

    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;
    

    ところで、ネストされたwith sは本当に醜いです(聖戦を始めましょう)

    withを使用することもあります 、しかし、3つのレベルをネストすることは決してありません!もしそうなら、少なくともSQLのスコープを縮小して、前にパラメータで終了するようにします。



    1. MySQL8.0用のPerconaServerを使用して暗号化されたデータベースをバックアップする方法

    2. OracleAnalytic関数-ウィンドウ句のリセット

    3. mysql select update

    4. SQLクライアントを介してテーブルに挿入されたレコードがjdbcプログラムで使用されたときに表示されない