Tôi không phải là một lập trình viên Delphi, nhưng tôi có một ứng dụng Delphi 7 cũ mà tôi cần sửa chữa và nó đang sử dụng ADO.Làm thế nào để ngăn chặn Delphi ADO tải toàn bộ bảng vào bộ nhớ?
Bảng cơ sở dữ liệu (MS Accesss) chứa +100.000 hàng và khi tôi đặt ADOTable.Active = true, nó bắt đầu tải toàn bộ bảng vào RAM và mất rất nhiều bộ nhớ và thời gian.
Làm cách nào để ngăn ADO tải toàn bộ bảng? Tôi đã cố gắng để thiết lập MaxRecords nhưng nó không giúp đỡ.
Về cơ bản tất cả chúng ta làm là att chương trình khởi động:
// Connect to database
DataModule.MyADOConnection.Connected:=true;
DataModule.MeasurementsADOTable.MaxRecords:=1;
// Open datatables
DataModule.MeasurementsADOTable.Active:=true;
Sau khi thiết lập kích hoạt = true nó bắt đầu để tải toàn bộ đo vào RAM và phải mất thời gian!
Chúng tôi đang sử dụng nhà cung cấp MSDASQL.1. Có lẽ nó không hỗ trợ tài sản MaxRecords?
Làm cách nào để thêm một số truy vấn hạn chế vào đối tượng dữ liệu này để chỉ "tải TOP 1 * từ các phép đo"?
làm thế nào để kết nối các TClientDataSet với MSAccess của tôi? Bạn có một số mã mẫu bạn có thể chia sẻ không? – Vlad
@Vlad: Quá trình này luôn giống nhau: kết nối TClientDataset (CDS) với một TDatasetProvider (DSP), sau đó điểm thuộc tính DSP.DataSet cho ADOQuery bạn đang mang dữ liệu. Trong phần Delphi trên About.com bạn có thể tìm thấy hàng ngàn ví dụ và trong docwiki embarcadero quá. –
Cảm ơn, tôi sẽ cố gắng thực hiện một dự án mẫu, nhưng vẫn là một bản demo với "Server (vị trí con trỏ?) Con trỏ OpenForwardOnly và một TCLientDataset với PacketRecords được đặt thành giá trị khác" sẽ là tuyệt vời! ;) – Vlad