Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng các tham số với Truy vấn ADO (mysql / MyConnector)

Tôi sẽ thử thêm SQL.BeginUpdate / SQL.EndUpdate xung quanh Thêm, nếu không văn bản SQL sẽ được phân tích cú pháp mỗi khi bạn gọi "Thêm".

Đây thường là một ý tưởng hay, vì ADOQuery.SQL là một TStringList có sự kiện OnChange đặt CommandText. Văn bản SetCommandText sau đó kết thúc gọi TADOCommand.AssignCommandText thực hiện một lượng lớn công việc phân tích cú pháp các tham số và thiết lập CommandObject.CommandText. Đôi khi trình điều khiển sẽ không thành công với các câu lệnh SQL một phần, nhưng công cụ này có vẻ ổn.

Tôi đã gặp vấn đề tương tự nhiều năm trước - đó là lý do tại sao tôi tìm hiểu về vấn đề này!

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, with s thực sự xấu xí (hãy để thánh chiến bắt đầu)

Đôi khi tôi sẽ sử dụng with , nhưng sẽ không bao giờ lồng ba cấp độ! Nếu đúng như vậy, ít nhất hãy giảm phạm vi của SQL để nó kết thúc trước bằng Tham số.



  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 GIẢI THÍCH 'type' thay đổi từ 'range' thành 'ref' khi ngày tháng trong câu lệnh where bị thay đổi?

  2. Liên kết dự án không hoạt động trên Máy chủ Wamp

  3. Chọn thứ tự 20 cuối cùng theo thứ tự tăng dần - PHP / MySQL

  4. Sự cố khi chèn từ tập lệnh python trong cơ sở dữ liệu mysql với công cụ innondb

  5. bảng mã trong bản sao MySQL