Chào các Bạn,
Có Bạn vừa gửi email hỏi tôi về vấn đề này có kèm theo file ứng dụng có dữ liệu.
File ứng dụng do Bạn ấy thiết kế có 1 form thiết kế để nhập chứng từ bán hàng phát sinh, gồm có:
+ Main Form: ghi thông tin chung của chứng từ (số chứng từ, ngày lập chứng từ, khách mua hàng, ...)
+ Sub Form: ghi chi tiết hàng hóa phát sinh của chứng từ (mã hàng, tên hàng, đơn vị tính, đơn giá, chiết khấu, thành tiền)
Tất cả đều là Bound Form
Bạn ấy than là Form load lên quá chậm (dữ liệu phát sinh của Bạn ấy có trên 30.000 chứng từ) và hỏi tôi cách khắc phục.
Việc khắc phục việc Form này load lên chậm rất đơn giản thôi các Bạn ạ, cụ thể như thế này:
- Tại sao chúng ta lại cho nạp tất tần tật trên 30.000 chứng từ lên form chi vậy?
- Sao chúng ta không hạn chế số mẫu tin được nạp theo nguyên tắc: cần tới đâu lấy tới đó thôi.
- Tôi xin đưa ra giải pháp cho trường hợp này là:
+ Nếu các Bạn muốn sử dụng 1 Bound Form, nghĩa là luôn gắn kết form với 1 nguồn dữ liệu xác đinh, thì hãy giới hạn nguồn dữ liệu ấy (RecordSource) ở giới hạn thấp nhất, đến zero mẫu tin nếu được.
+ Nếu mở form ra để nhập chứng từ mới phát sinh thì ta đặt RecordSource với điều kiện lọc tương tự như sau:
Mã:
SELECT ...
FROM ...
WHERE((tableChungtu.SoChungtu) Is Null)
+ Khi nào cần tìm và mở ra xem nội dung các chứng từ theo điều kiện nào đó thì ta lại khai báo RecordSource cho form với điều kiện ở mệnh đề WHERE một cách thích hợp.
+ Tôi xin thêm một gợi ý nữa trong thiết kế form này là: nên bố trí 1 nút lệnh "thêm mới" với thủ tục cho nạp lại RecordSource có giới hạn về zero mẫu tin như đã nêu ở trên và đưa Form về trạng thái sẵn sàng nhận dữ liệu mới:
Mã:
...
WHERE((tableChungtu.SoChungtu) Is Null)
Vậy là gọn gàng, vừa đủ dùng cho nhu cầu, nên form load lên sẽ nhanh hơn rất nhiều, lại giới hạn được xung đột ở mức tối thiểu.
Chúc các Bạn thành công.