1/ Mạnh nghỉ trên cùng 1 File xài mảng đi cho gọn và nhanh ... trừ khi lấy dữ liệu từ 1 file đóng
2/ Mà xài ADO trong trường hợp này dễ gì nhanh hơn cái Mảng trên Sheet ?????????????
Mảng chỉ là... mảng, một cấu trúc căn bản.
Để mảng có thể làm những việc khác, ngừoi ta lồng nó vào các hình thức khác, điển hình là ArrayList trong dot net. Với ArrayList, ta có thể sort.
Ở đây, adodb.recordset được dùng như là một dạng Table (table của Excel, không phải Access)
Trong thớt này, tác giả giới thiệu cách lợi dụng hai thủ tục của ado recordset để filter và sort.
Muốn làm được việc này, code sử dụng array căn bản phải gọi hai hàm nào đó. Nếu hàm chưa có sẵn trong thư viện, bạn phải import chúng.
Cách của HLMT trình bày trên là đẩy mảng dữ liệu từ sheet vào recodset, từ đây dùng Filter - lọc. Nếu bài toán của người dùng là trích lọc dữ liệu trên sheet thì hoàn toàn ok. Tuy nhiên đây không phải SQL nên sẽ gặp phải các cấn đề sau:
- Mất thời gian lưu array vào recordset ban đầu. Mảng data có thể lấy từ sheet, còn lấy từ csdl khác như Access thì nên lấy bằng SQL luôn chứ không dùng Array vì sẽ mất hai lần làm không cần thiết (câu hỏi của a Hoàng Trọng Nghĩa)
- Chỉ áp dụng cho bài toán Filter trên data nguồn đưa vào dạng đơn lẻ không quan hệ. Vì không phải cách SQL nên không thực hiện được việc ORDER BY, GROUP BY, HAVING, các kết nối bảng với INNER JOIN, LEFT JOIN,...
Như vậy bài toán trên nên dùng trong phạm vi dữ liệu nguồn là Excel, một bảng nguồn không quan hệ. Bài toán gọi là lọc dữ liệu trong mảng.
ADODB chỉ là một API. Không thể so sánh với SQL là một ngôn ngữ tiêu chuẩn, truy vấn qua bộ máy của CSDL (Access, SQL Server, vv...)
@Thớt:
Nếu tôi nhớ không lầm thì có thể đưa dữ liệu vào recordset bằng cách ngắn hơn như sau:
'Dua du lieu nguon tu mang da set vao Recordset
Dim fArray
fArray = Array("ID", "MatID", "Balance") ' hoặc Array(0, 1, 2)
For i = LBound(vArray) To UBound(vArray)
.AddNew fArray, Array(vArray(i, 1), vArray(i, 2), vArray(i,4))
Next
.Update