-
So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng
tvn_hut > 29-05-18, 03:23 PM
Hi All
Mình có 1 vấn đề rất mong mọi người giúp đỡ. Nếu làm bằng excel thì hoàn toàn có thể làm dễ dàng, nhưng trên access mình chưa tìm được giải pháp. Vấn đề đặt ra như sau: Mình có 1 bảng với 3 trường Field1, field2 và filed3 tương ứng có giá trị sẽ được nhập trên form.
Filed1: 123, 123, 123, 123, 123, 124, 124, 125...
Field2: PK5A, PK5B, PK5A, PK5E, PK5E, PK5A
Và kết quả tính toán tại trường 3 theo nguyên tắc như sau: record đầu tiên luôn là 123 + A = 123A. sau đó nó so sánh giá trị mới với các reocord cũ, nếu trùng nhau nó sẽ so sánh giá trị tại trường Filed 2 để quyết định ký tự tiếp theo là gì. nếu record tại trường 2 trùng với bất kỳ record trước nó sẽ lấy trùng tên trước. còn nếu khác nó sẽ chuyển sang ký tự B, C... kết quả như sau:
Filed3: 123A, 123B, 123A, 123C, 124A, 124B
123A: Vì là record đầu tiên
123B: Do 123 trùng nhau ở field1 + PK5A khác Pk5B nên kết quả là 123B
123A tiếp theo là do PK5A trùng với record đầu của field2 và 123 trùng nhau tại field1
123C: PK5E khác với tất cả record trước.
124A: 124 khác với các record trước nên quay về ký tự A đồng thời bắt đầu vòng so sánh mới với những record 124 ( trường 1 giá trị sẽ tăng dần sẽ ko lặp lại giá trị nhỏ hơn)
124B: PK5A khác so với record trước là PK5E
Rất mong mọi người chỉ mình hướng giải quyết, cám ơn các bạn đã đọc bài. -
RE: So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng
ongke0711 > 29-05-18, 04:11 PM
Bảng này có bắt buộc sắp xếp theo thứ tự Field 1 rồi sau đó sort theo Field 2 không hay chỉ field 1 thôi? -
RE: So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng
tvn_hut > 29-05-18, 07:25 PM
(29-05-18, 04:11 PM)ongke0711 Đã viết: Bảng này có bắt buộc sắp xếp theo thứ tự Field 1 rồi sau đó sort theo Field 2 không hay chỉ field 1 thôi?
Cũng không hẳn theo thứ tự field1, nhưng nó phải so sánh trước xem record có giống hay khác nhau. Nếu giống nhau nó sẽ lấy kết quả so sánh bên field2 để có kết quả cuối cùng. còn nếu khác nhau thì ko cần kết quả bên field2 nó gán mặc định là ký tự A. Tiếp theo dựa vào kết quả so sánh bên filed2 cho ra B, C hay D. -
RE: So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng
ongke0711 > 29-05-18, 07:38 PM
Nếu vậy tôi gán cái record thứ 4: 123 PK5E là 123B được không? (thay vì bạn đang gán là 123C). Còn cái record thứ 2 123 PK5B là 123C. -
RE: So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng
tvn_hut > 29-05-18, 10:18 PM
(29-05-18, 07:38 PM)ongke0711 Đã viết: Nếu vậy tôi gán cái record thứ 4: 123 PK5E là 123B được không? (thay vì bạn đang gán là 123C). Còn cái record thứ 2 123 PK5B là 123C.
không được bạn ah vì PK5E nó khác so với 2 record trên nên phải là C sau A và B. Yêu cầu bài toàn nó hơi phức tạp. Do đó đến giờ mình chưa tìm ra cách. Trường 1 cứ record thay đổi thì nó quay về ký tự đầu tiên là A. nêu nó ko thay đổi thì theo điều kiện từ trường 2 ta có ký tự B, c hay D thậm chí có thể lặp lại nếu record giống nhau. Bạn cứ chỉ mình cách sao có thể so sánh record tại 1 trường. Biết đâu gợi ý từ bạn và mọi người mình có thể giải bài toán này. -
RE: So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng
ongke0711 > 29-05-18, 10:39 PM
Vậy tức là có sắp xếp theo thứ tự rồi - theo field 1 rồi đến field 2. Nếu ko theo thứ tự làm sao bạn biết chắc 2 cái record đầu tiên nó đến trước (123-PK5A, 123-PK5B)? Tôi hỏi vì cái sắp xếp hay không sắp xếp nó ảnh hưởng đến vòng lặp trong code, nó sẽ cho kết quả theo hướng khác liền.
Tôi chưa test nhưng cách làm tôi nghĩ nó như thế này:
- Tạo 1 mảng (A,B,.....Z)
- Set rs1 là danh sách các record của Field1. Move first.
- Chạy vòng lặp theo rs1. Do Until rs1.EOF
- Lấy rs2 là "Select các record có field 1 = rs1!Field1 Order by field 2"
- Chạy vòng lặp theo rs2. Sẽ Loop khi dòng kế tiếp của Field 2 # dòng trước nó.
- Gán Field 3 = rs1!Field1 + biến mảng (i) trong đó i=0 - 25 <=> A...Z