2011-12-16 13 views
5

Sử dụng Delphi 2010, tôi đã sử dụng TSQLQuery và TSQLConnection để kết nối với máy chủ MySQL từ xa. Tôi đã sử dụng truy vấn SQL như sau:Làm cách nào để nhận được kết quả của truy vấn SQL?

SQLQuery1.SQL.Text := 'SELECT * FROM registered WHERE email="'+email+'" and login_pass="'+password+'"'; 

SQLQuery1.Open; // Open sql connection 

Tôi nên làm gì để liệt kê hoặc hiển thị dữ liệu được truy vấn này chọn?

Khi tôi gõ

SQLQuery1['who']; // The resault is : James Kan 

Tôi nghĩ rằng đó là hiển thị mục cuối cùng trong danh sách. Nhưng tôi muốn hiển thị mỗi mục, như tôi có thể với vòng lặp foreach trong PHP. Làm thế nào tôi có thể tạo ra, ví dụ, một TLabel cho mỗi mục?

+1

Là một sang một bên lưu ý, cách bạn mã SQL là cách thông thường để cho phép "SQL Injection". Làm điều đó cho một bảng đăng nhập, và một người dùng thông minh có thể đọc toàn bộ bảng. Bạn nên sử dụng "tham số SQL", nghĩa là nơi email =: email và login_pass =: mật khẩu. Chuỗi ghép nối mà không cần "khử trùng" đầu tiên, chúng rất nguy hiểm vì người dùng có thể nhập các từ khóa "thích hợp" và thay đổi truy vấn của bạn nghĩa là toàn bộ. –

+0

Sử dụng các tham số sẽ thoát khỏi các giá trị, nhưng bạn sẽ muốn lọc ra 'NULL'. Ngoài ra, lọc ra '%' và '_' với mệnh đề LIKE. –

Trả lời

12

Bạn chỉ cần lặp qua các resultset như

SQLQuery1.Open; 
SQLQuery1.First; // move to the first record 
while(not SQLQuery1.EOF)do begin 
    // do something with the current record 
    ... 
    // move to the next record 
    SQLQuery1.Next; 
end; 
+1

+1, bạn đã nhanh hơn. Tôi cũng muốn tạo các nhãn cho mỗi hàng :) – TLama

+2

và nếu truy vấn đã hoạt động và trên bản ghi cuối cùng, hãy điều hướng đến bản ghi 'First' trước khi lặp. –

+0

Nếu bạn thấy rằng ứng dụng của bạn bị đóng băng, bạn đã quên 'Tiếp theo', đó là một sai lầm dễ dàng. –