So sánh hai table bằng vb 6 (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

caohuy51190

Thành viên mới
Tham gia
1/3/12
Bài viết
4
Được thích
0
Có bác nào biết cách so sánh 2 bảng dữ liệu trong EX nhanh nhất không. Mình dùng 2 lệnh For để tìm từng giá trị trong bảng này rồi so sánh với từng giá trị trong bảng kia nên xử lí rất chậm. Ai biết thì chỉ giáo giùm nha. Thanks!
 
Giải thuật khác nhau tuỳ theo so sánh xong thì muốn kết quả là cái gì.
 
Upvote 0
Giải thuật khác nhau tuỳ theo so sánh xong thì muốn kết quả là cái gì.
Hiện mình đang có hai bảng DL chứa các thông tin về tên sản phẩm, đơn giá, ... Một bảng là Database ở định dạng Access. Một bảng là Excel chứa thông tin tên hàng, số lượng mà cần phải tổng hợp lại. Mình muốn so sánh từng dòng trong file excel với tất cả các giá trị trong database để tìm các giá trị giông nhau. Tuy nhiên do số lượng dòng trong file database lớn nên VB so sánh rất lâu nếu dùng vòng lặp For...Next
 
Upvote 0
So sánh như thế nào thì gọi là giống nhau? Giống nhau rồi làm gì nữa? Tổng hợp có nghĩa là làm sao?
 
Upvote 0
Nghĩa là như này: Mình có 2 bảng dữ liệu. Trong cột A1 của bảng 1 có chứa tên hàng, cột B1 chứa giá của hàng đó( bảng này là CSDL). Bảng thứ 2 có cột A1 cũng chứa tên hàng và cột B1 chứa thông tin về số lượng. Mình muốn tìm các tên hàng ở bảng 2 có trong báng 1 để từ đó tính được giá tiền của hàng ứng với số lượng ở bảng 2
 
Upvote 0
Có 3 cách, sử dụng cách nào tuỳ theo tình trạng dữ liệu:

Cách 1:

Lập một Dictionanry. trường Key là tên hàng, trường value là một type gồm 2 biến: biến thứ nhất là đơn giá, biến thứ hai là tổng tiền.

- Đọc bảng 1 và ghi tên hàng vào key của Dictionary, ghi đơn giá vào phần đơn giá của value, và ghi 0 vào tổng tiền.
- Đọc bảng 2, tra tên hàng trong Dictionary, dùng đơn giá để tính số tiền và cộng vào tổng.
- Đọc Dictionary và lấy ra tổng tiền của từng món hàng

Cách này rất hiệu nghiệm khi bảng 1 khá nhỏ so với bảng 2

Cách 2:

- Dùng Resize để chuyển bảng 1 ra array1 và bảng 2 ra array2.
- Sort cả 2 arrays
- Đọc array2 và dò array1.

Vì cả 2 mảng đều đã được sorted cho nên lúc dò chỉ việc dò tới, không phải vòng lại. Và cách này chung chung thì áp dụng được với mọi hình dạng dữ liệu. Tuy với một vài dạng nào đó sẽ không nhanh bằng các cách kia.

Cách 3:

Dùng ADO để join 2 bảng và sử lý. Câu lệnh SQL như sau

SELECT bang1.maHang, SUM(soLuong*donGia) [tongTien]
FROM bang1 INNER JOIN bang2 ON bang1.maHang = bang2.maHang
GROUP BY bang1.maHang

Cách này rất hiệu nghiệm khi cả 2 bảng rất lớn
 
Lần chỉnh sửa cuối:
Upvote 0
Có 3 cách, sử dụng cách nào tuỳ theo tình trạng dữ liệu:

Cách 1:

Lập một Dictionanry. trường Key là tên hàng, trường value là một type gồm 2 biến: biến thứ nhất là đơn giá, biến thứ hai là tổng tiền.

- Đọc bảng 1 và ghi tên hàng vào key của Dictionary, ghi đơn giá vào phần đơn giá của value, và ghi 0 vào tổng tiền.
- Đọc bảng 2, tra tên hàng trong Dictionary, dùng đơn giá để tính số tiền và cộng vào tổng.
- Đọc Dictionary và lấy ra tổng tiền của từng món hàng

Cách này rất hiệu nghiệm khi bảng 1 khá nhỏ so với bảng 2

Cách 2:

- Dùng Resize để chuyển bảng 1 ra array1 và bảng 2 ra array2.
- Sort cả 2 arrays
- Đọc array2 và dò array1.

Vì cả 2 mảng đều đã được sorted cho nên lúc dò chỉ việc dò tới, không phải vòng lại. Và cách này chung chung thì áp dụng được với mọi hình dạng dữ liệu. Tuy với một vài dạng nào đó sẽ không nhanh bằng các cách kia.

Cách 3:

Dùng ADO để join 2 bảng và sử lý. Câu lệnh SQL như sau

SELECT bang1.maHang, SUM(soLuong*donGia) [tongTien]
FROM bang1 INNER JOIN bang2 ON bang1.maHang = bang2.maHang
GROUP BY bang1.maHang

Cách này rất hiệu nghiệm khi cả 2 bảng rất lớn
Bạn cho mình hỏi chút là nếu dùng cách thứ 3 thì có cách nào so sánh 1 bảng database là bảng trong SQL, còn một bảng cần so sánh lại là bảng trong excel không?
 
Upvote 0
Hiện mình đang có hai bảng DL chứa các thông tin về tên sản phẩm, đơn giá, ... Một bảng là Database ở định dạng Access. Một bảng là Excel chứa thông tin tên hàng, số lượng mà cần phải tổng hợp lại. Mình muốn so sánh từng dòng trong file excel với tất cả các giá trị trong database để tìm các giá trị giông nhau. Tuy nhiên do số lượng dòng trong file database lớn nên VB so sánh rất lâu nếu dùng vòng lặp For...Next

Bạn cho mình hỏi chút là nếu dùng cách thứ 3 thì có cách nào so sánh 1 bảng database là bảng trong SQL, còn một bảng cần so sánh lại là bảng trong excel không?

Chung quy thì chịu thua bạn luôn. Luc thì nói là Access, lúc thì nói là SQL (Server?)

Trong Access thì dùng linked table. Trong SQL Server thì dùng linked database, OpenQuery hoặc OpenRowset.

Cách khác dễ hơn - nếu bảng trong SQL Server nhỏ:
Dùng ISAM để nạp nó qua csv. Rồi sau đó dùng để ADO nối.

Chú Thích:
SQL là ngôn ngữ tên viết tắt Structured Query Language, và được tiêu chuẩn hoá.
Cái phần mềm CSDL của Microsoft tên là SQL Server. Ngôn ngữ dùng trên SQL Server tên là T-SQL (Transact SQL)
Khi học CSDL, một số người có thói quen hay gọi SQL Server là SQL. Thực sự cách gọi này là sai!
 
Upvote 0
Mọi người cho mình hỏi cách so sánh hai bảng dữ liệu trong VB 6 bằng cách nào thì cho tốc độ nhanh nhất. Một bảng là CSDL mình để trong file access, bảng kia là bảng dữ liệu trong excel. Mình đã thử kết nối database bằng kết nối ADO và dùng 2 câu lệnh vòng lặp For để tìm các giá trị giống nhau trong hai bảng trên nhưng tốc độ xử lí rất chậm khi dữ liệu trong 2 bảng nhiều.
Nhờ mọi người xem giúp mình với! Thanks.
Kết nối và lấy dữ liệu về 2 mảng sau đó so sánh trên mảng!
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom