Đánh giá chủ đề:
  • 5 Votes - 3.8 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Đánh số thứ tự có điều kiện
#1
Hỏi: tbl (ID(auto), code(text), numChar(int))
1. Giờ muốn update dữ liệu vào field [numChar] từ 1->hết bảng ghi
2. Insert thêm một field [numGroup]
3. Update dữ liệu vào field [numGroup] với điều kiện sau
3.1 Lấy dữ liệu field [numChar] làm gốc cứ cách 10 số thì nhóm thành 1 Group, như thế số thứ tự từ 1-10 [numChar]-> [numGroup] (1)
3.2 Nếu (max[numChar]/10) có số dư từ 0->5 thì đánh số những ID này theo Group cuối cùng , nghĩa là nếu có [numChar] 1->25 thì 10 thuộc Group 1, 15 thuộc Group2
3.3 Nếu số dư trên từ 6-10 thì lấy (số dư +10)/2 . Sau đó đánh số bình thường (lúc này 2 Group cuối không phải là 10) với điều kiện group n có số ID < group n-1 . Nghĩa rằng nhóm cuối cùng bảo giờ cũng có số ID nhỏ nhất"
----------
Mình ngồi nghĩ hoài mà không biết viết thế nào với yêu cầu này
VBA nhé
Chữ ký của ncxn Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#2
(13-09-10, 04:52 PM)ncxn Đã viết: Hỏi: tbl (ID(auto), code(text), numChar(int))
1. Giờ muốn update dữ liệu vào field [numChar] từ 1->hết bảng ghi
2. Insert thêm một field [numGroup]
3. Update dữ liệu vào field [numGroup] với điều kiện sau
3.1 Lấy dữ liệu field [numChar] làm gốc cứ cách 10 số thì nhóm thành 1 Group, như thế số thứ tự từ 1-10 [numChar]-> [numGroup] (1)
3.2 Nếu (max[numChar]/10) có số dư từ 0->5 thì đánh số những ID này theo Group cuối cùng , nghĩa là nếu có [numChar] 1->25 thì 10 thuộc Group 1, 15 thuộc Group2
3.3 Nếu số dư trên từ 6-10 thì lấy (số dư +10)/2 . Sau đó đánh số bình thường (lúc này 2 Group cuối không phải là 10) với điều kiện group n có số ID < group n-1 . Nghĩa rằng nhóm cuối cùng bảo giờ cũng có số ID nhỏ nhất"
----------
Mình ngồi nghĩ hoài mà không biết viết thế nào với yêu cầu này
VBA nhé

Cái này cũng đơn giản. Nhưng mình góp ý thế này. Việc thêm/bỏ field chỉ khi nào thật cần thiết như là khi phát triển ứng, và cần phát hành bản mới. Khi đó mình mới tiến hành thêm field.
Vì vậy việc thêm 1 field là không cần thiết vì bạn hoàn toàn có thể mở table và tự tạo 1 field mới.
Nếu bạn vẫn muốn thêm field bằng VBA thì nên tham khảo ở đây:
http://www.thuthuataccess.co.cc/forum/thread-118.html.

Câu 1, câu 3 và câu 4 bạn có thể gom chung trong 1 vòng lặp.
bằng cách gán

table cho 1 recordset. rs
Tạo ra biến i dùng để duyệt, j dùng lưu số cuối cùng của group
i=1
j=1
for i=1 to recordcount
rs("numChar") = i
rs("numGroup")=j
' kiểm tra biến i, cứ 10 số thì tăng lên 1 group
if (i mod 10) =0 then
j=j+1
end if
next i.

ý tưởng là vậy, bạn tự sửa lại cho thích hợp với điều kiện thực tế của mình! (điều kiện thứ 3 mình không rõ ý bạn lắm, bạn nên cho số cụ thể. Ví dụ từ numchar 1->26
1->10 group 1
11 -> group ?
15 -> group?
16 group ?

Ứng với mỗi trường hợp cụ thể bạn cho 1 kết quả cụ thể!
Thân!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
À rắc rối là cái đk cuối:
1->10 -> gr 1
dư là 6 >5 vì thể số dư này giải quyết bằng cách :
(6+10)/2 (số dư>5 Cộng cho số lượng mỗi Gr là 10) chia cho 2 vì thế 2 Gr cuối là
(6+10)/2= 8
11->1daydreamingGr2
19->26->Gr3
Nhưng nếu tổng số là 27 thì
int((7+10)/2)=8 dư 1
thì
11->19 : Gr: 2 (có 9 phần tử)
20->27 : Gr: 3 (Có 8 phần tử)
----------
Hì hì: cái vòng lặp thì ncxn viết khác một tý , nhưng chỗ không biết là dùng SQL update vào hay dùng thuộc tính racordset (cái này hồi giờ chưa có làm)?
Chữ ký của ncxn Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#4
(14-09-10, 10:16 AM)ncxn Đã viết: À rắc rối là cái đk cuối:
1->10 -> gr 1
dư là 6 >5 vì thể số dư này giải quyết bằng cách :
(6+10)/2 (số dư>5 Cộng cho số lượng mỗi Gr là 10) chia cho 2 vì thế 2 Gr cuối là
(6+10)/2= 8
11->1daydreamingGr2
19->26->Gr3
Nhưng nếu tổng số là 27 thì
int((7+10)/2)=8 dư 1
thì
11->19 : Gr: 2 (có 9 phần tử)
20->27 : Gr: 3 (Có 8 phần tử)
----------
Hì hì: cái vòng lặp thì ncxn viết khác một tý , nhưng chỗ không biết là dùng SQL update vào hay dùng thuộc tính racordset (cái này hồi giờ chưa có làm)?
sad
Đọc vòng tới vòng lui vẫn không hình dung ra được. Khi mà mức ý niệm mình chưa có thì không thể thể hiện bằng ngôn ngữ lập trình được! sad

Dùng query Update cũng là cách. Nhưng theo kinh nghiệm của mình, nếu bạn cần update một số n record cho table A theo nguyên tắc nào đó thì dùng query nó chạy nhanh hơn. Trong trường hợp này đằng nào mình cũng duyệt table, nên nhân đó mình gán số .
Sau khi gán mình gọi rs.update

À, mà việc phân nhóm này ứng dụng vào việc gì thế! Bác có phân thử bằng bảng Excel chưa?
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dinhvank19
#5
À! Có phải ý bạn như thế này, mình lấy mẫu rộng ra một chút cho dễ hiểu!
Ví dụ 1: ta có 34 record (Click to View)
Ví dụ 2: ta có 37 record (Click to View)
Trường hợp tổng số record là 36 tương tự 37, khi đó: x1=x2=8 nên có làm tròn thì vẫn là 8
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
Bằng excel làm vài phút là xong hà
Như 2 ví dụ của bác là được
------
Ví dụ này hồi trước Cty có tổ chức đi chơi (khoản 1500 người) có dữ liệu sẵn ở Phòng Nhân Sự mình chỉ lấy ra để sắp xếp lại và đăng ký phòng cho họ (thực ra là 5 người 1 phòng) , phân biệt nam/ nữ...vợ chồng, gia đình... nói chung còn một số điều kiện rườm rà khác không có đưa lên đây
---
Việc đầu tiên là cho chương trình sx tự động sau đó public cho mọi người vào đăng ký , lúc này các điều kiện như vợ chồng, gia đình, số lượng ... mới có hiệu lực. hì hì
Làm excel thì giải quyết sx tự động thì nhanh nhưng tới khi cho người ta vô tự đăng ký thì ...chịu
Chữ ký của ncxn Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#7
Hơi nhiêu khê một chút, nếu chỉ có nhu cầu xài 1 lần rồi thôi thì làm bằng Excel, xong import vào Access cho mọi người đăng ký! big hug
Chứ ngồi mày mò viết cho khổ cực, rồi chỉ xài mỗi 1 lần thì phí quá!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
Mình demo thử yêu cầu của bạn nhé.
Giả sử bạn có 1 table DS(ID,code, numchar,group)

Đoạn code sau có lẽ đáp ứng được nhu cầu của bạn:
Giải thuật của mình như sau:

Mã:
Private Sub Command1_Click()
Dim rs As Recordset
Dim i As Integer ' Bien de duyet
Dim j As Integer ' bien luu group
Dim X1 As Integer ' so phan tu group m-1
Dim X2 As Integer ' so phan tu group m
Dim n As Integer ' so record .

Set rs = CurrentDb.OpenRecordset("DS", dbOpenDynaset)
rs.MoveLast
n = rs.RecordCount        'vi du n=37
If (n Mod 10) > 5 Then
    X1 = Round((((n Mod 10) + 10) / 2) + 0.5, 0)
    X2 = Fix(((n Mod 10) + 10) / 2)
Else ' truong hop so du <5
   X1 = n Mod 10
   X2 = 0
End If
rs.MoveFirst
i = 1
j = 1

Do Until rs.EOF
  'Cap nhat Numchar
rs.Edit
rs("numchar") = i
rs("group") = j
rs.Update
If ((i < (n - X1 - X2)) And ((i Mod 10) = 0)) Or ((i = (n - X1 - X2)) And (X1 > 5)) Or (i = n - X2) Then
       j = j + 1
End If

  i = i + 1
rs.MoveNext
Loop
rs.Close

End Sub

Mời xem file đính kèm


File đính kèm
.rar   Xapxepnhom.rar (Kích cỡ: 14.27 KB / Tải về: 89)
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
ò thanks nhé, chủ yếu là thuật toán và method thôi
Chữ ký của ncxn Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#10
Cảm ơn bạn đã chia sẽ
Chữ ký của dinhvank19 Xin chào Guest! Mình là dinhvank19, thành viên của Thủ Thuật Access tham gia ngày Nov 2010.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Viết code có điều kiện " lệnh Chạy tiếp khi đóng tbl cho sẵn" Trần Linh 3 140 21-10-16, 11:11 AM
Bài mới nhất: Minh Tiên
  [Thủ Thuật] Tạo Form đánh giá 1 - 5 sao cho từng Record ongke0711 0 119 03-05-16, 06:51 PM
Bài mới nhất: ongke0711
  [Thủ Thuật] Lọc điều kiện theo nhiều dòng trong 1 Listbox hoặc nhiều Listbox ongke0711 7 621 12-02-16, 09:50 PM
Bài mới nhất: caytregiavn77
  [Help] phép tính có điều kiện thanhquyt 2 258 22-01-16, 11:00 PM
Bài mới nhất: thanhquyt
  [Thủ Thuật] In kết quả record sau khi tìm kiếm có điều kiện với hình ảnh khi có đường dẫn tvn_hut 5 539 18-01-16, 04:24 PM
Bài mới nhất: tranthanhan1962

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ