Tôi không biết về Delphi 2007, nhưng tôi đã làm điều tương tự với Delphi 7 và Oracle 8.
Đây là những điều tôi đã làm:
- Đặt TAdoDataSet.CursorLocation theo truy vấn:
- clUseClient nếu truy vấn tìm nạp các bản ghi cho GUI và truy vấn tương đối "đơn giản" - không có nhóm hoặc tính tổng
- clUseServer nếu truy vấn có một số loại tổng hợp (tổng, nhóm, đếm)
- Đặt TAdoDataSet.CursorType theo truy vấn:
- ctForwardOnly đối với các báo cáo mà bạn không cần cuộn lại qua tập dữ liệu - chỉ hoạt động với clUseServer
- ctStatic cho GUI. Đây là chế độ chỉ hoạt động với clUseClient
- Đặt TAdoDataSet.LockType theo truy vấn:
- ltReadOnly cho mọi tập dữ liệu không được sử dụng để chỉnh sửa (lưới, báo cáo)
- ltOptimistic khi các bản ghi được đăng lên cơ sở dữ liệu ngay sau khi thay đổi (ví dụ:người dùng chỉnh sửa dữ liệu trên biểu mẫu)
- ltBatchOptimistic khi bạn thay đổi số lượng lớn các bản ghi. Điều này dành cho các tình huống mà bạn tìm nạp số lượng bản ghi, sau đó thực hiện một số xử lý trên chúng và sau đó gửi các bản cập nhật đến cơ sở dữ liệu hàng loạt. Điều này hoạt động tốt nhất khi kết hợp với clUseClient và ctStatic.
- Theo kinh nghiệm của tôi, nhà cung cấp Microsoft OLEDB cho Oracle hoạt động tốt hơn nhà cung cấp Oracle OleDb. Bạn nên kiểm tra điều đó.
Chỉnh sửa: Kiểm tra bình luận của Fabricio về các vấn đề đốm màu có thể xảy ra. - Thay thế TAdoQUery với TAdoDataSet . TAdoQuery được tạo để chuyển đổi ứng dụng từ BDE sang ADO, nhưng Borland / Codegear khuyến nghị là sử dụng TAdoDataSet
- Kiểm tra lại chuỗi kết nối Oracle để đảm bảo rằng bạn không có độ trễ mạng. Thời gian kết nối với Oracle kéo dài bao lâu? TnsPing là bao lâu?