Chúng tôi đã chuyển mã sang Delphi XE2 và cần thay đổi các thành phần truy cập dữ liệu của chúng tôi từ ODBCExpress của bên thứ ba vốn không còn hoạt động nữa, thành TSQLQuery của dbExpress.Có thể sử dụng TSQLQuery của dbExpress không? như thông số?
Chúng tôi đã parametrized truy vấn SQL như:
sSQL :=
'UPDATE ZTestData SET '+
' StringField =?, '+
' IntField = ?, '+
' DecimalField = ?, '+
' BooleanField = ?, '+
' DateTimeField = ?, '+
' TextField = ? '+
' WHERE UniqueID = 3';
nếu chúng ta sử dụng đoạn mã sau:
var
qry:TSQLQuery;
begin
qry.Close;
qry.SQL.Text := sSQL;
ShowMessage(IntToStr(qry.Params.Count));
end;
Nó trả về 0, vì vậy chúng tôi không thể để có được những ràng buộc làm việc, nhưng nếu chúng tôi thay đổi sSQL thành:
sSQL :=
'UPDATE ZTestData SET '+
' StringField =:Param1, '+
' IntField = :Param2, '+
' DecimalField = ?, '+
' BooleanField = ?, '+
' DateTimeField = ?, '+
' TextField = ? '+
' WHERE UniqueID = 3';
Nó trả về 2.
Sẽ là một rắc rối lớn khi thay đổi tất cả các truy vấn SQL thành cú pháp tham số mới. Có anyway cho TSQLQuery để nhận ra? cú pháp?
Tôi thấy DBXCommon.TDBXCommand sử dụng? Cú pháp:
http://www.andreanolanusse.com/en/parameterized-queries-with-dbexpress-dbx-framework/
Nhưng nó sẽ có nghĩa ném đi mã của chúng tôi có sử dụng TSQLQuery. Cách nhanh nhất/dễ nhất để giải quyết vấn đề này là gì? Sự khác biệt giữa TSQLQuery và TDBXCommand là gì, về những gì có liên quan đến tôi?
Xem câu trả lời của tôi. DB.TParams.ParseSQL là một phương thức chuyển đổi các tham số thành các dấu hỏi, nếu đó là tuyến đường bạn muốn đi. Tôi thích ParamByName hơn. – Robo