ncxn > 13-09-10, 04:52 PM
Noname > 13-09-10, 09:21 PM
(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é
ncxn > 14-09-10, 10:16 AM
Noname > 14-09-10, 10:24 AM
(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->1Gr2
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)?
Noname > 14-09-10, 11:14 AM
ncxn > 14-09-10, 02:20 PM
Noname > 14-09-10, 02:25 PM
Noname > 15-09-10, 01:43 AM
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
ncxn > 16-09-10, 03:42 PM
dinhvank19 > 04-11-10, 05:42 PM