ongke0711 > 19-06-16, 12:38 PM
cannguyen > 19-06-16, 12:45 PM
(19-06-16, 12:38 PM)ongke0711 Đã viết: Tôi hỏi vì cái key của ứng dụng này là ở bước 3 và 5 là tính khoảng cách và dự đoán lớp.
Tôi nghĩ bạn chỉ cần dùng query, không cần tạo table để khỏi phải ghi, chép gây nên lỗi "Write Conflict"...
Từ công thức có thể viết cái hàm áp dung chung cho bất cứ môn nào nhập thêm vô để tính khoảng cách.
Bạn làm được như hiện tại là hay lắm rồi, không cần biết đi đường xa hay gần, miễn tới đích là OK rồi. Sau đó rút kinh nghiệm rồi cải tiến tiếp.
Tôi cũng thấy bạn có thể mở rộng ứng dụng cho bất cứ môn học nào thay vì hạn chế chỉ nhập cố định những môn đã thiết kế fix trên form 1. Nhập điểm từng sinh viên ở dạng datasheet để có thể chủ động thêm môn mới .
Cho học hỏi thêm là cách tính KC1 là theo công thức Euclidean còn công thức KC2 (tính cho chỉ số "Thi lại") là gì vậy bạn?
ongke0711 > 24-06-16, 02:55 AM
cannguyen > 25-06-16, 06:39 PM
(24-06-16, 02:55 AM)ongke0711 Đã viết: Tôi đã xem xong cái file của bạn nhưng thực sự cũng chưa biết chính xác lỗi "Write conflict" nó nằm ở đoạn nào vì bạn ở nút lệnh [THỰC HIỆN] bạn chạy nhiều query, tạo nhiều table, update v.v.. như mê hồn trận nên chưa tìm đc lỗi.
Cách nhanh nhất tôi là tôi dựa 2 cái table chính như bạn nói và sửa lại cái form thực hiện cho nó gọn, không cần tạo nhiều table và một đống query và form như hiện tại.
Tôi chỉ sửa phần form và code để chạy ra kết quả, phần report bạn tự sửa lại theo table dữ liệu kết quả được tạo ra sau khi Form thực thi. Gom các bước vô 1 form duy nhất để dễ nhìn và xử lý như bạn maidinhdan đã có gợi ý.
Cách làm của tôi: Đối với chọn 1 Sinh viên hay nhóm SV cũng xử lý giống nhau, tránh việc tạo 2 lần các table, query cho từng trường hợp dẫn đến CSDL cồng kềnh.
- Chọn 1 SV hay nhóm -> Query từ table SV để lấy dữ liệu cần dự báo của SV hay nhóm SV đó.
- Để tính KC đối với từng đối tượng SV dự báo bạn dùng Do Until ... Loop để xử lý lần lượt từng record (SV) của query ở trên.
- Phải xử lý đủ 5 bước cho 1 SV xong, Append kết quả vào table rồi mới xử lý tiếp SV kế tiếp.
- Trong cặp lệnh Do until ... Loop, bạn dùng rs.Edit, rs.Update để cập nhật KC vào table HSLUONG.
- Sắp xếp table HSLUONG theo thứ tự tăng dần của trường [KC]. Mục đích là để lọc TOP K record có [KC] gần với đối tượng dự báo nhất. Dùng "SELECT TOP K HSLUONG.* FROM HSLUONG"
- Dùng hàm DMax để tìm số "Lớp" có nhiều mẫu nhất => gán kết quả dự báo cho đối tượng.
- Dùng hàm DCount số record có Dmax để xác định có trùng "Lớp" không rồi chọn "Lớp" có khoảng cách nhỏ nhất (DMin).
Cách làm này bạn chỉ cần 3 cái Saved Query và tạo thêm 2 tables thay vì 30 cái query và 7 cái table như cách bạn làm hiện tại.
Bạn xem file đính kèm.
http://www.mediafire.com/download/m6hh4b...g/K-NN.mdb