-
Tạo nút tự động đánh lại số CT
khanh > 02-08-16, 05:57 PM
Mình đã tạo nút Đánh số và code như sau:
Private Sub Cmd1_Click()
Dim rs As Recordset
Dim so As Integer
Set rs = CurrentDb.OpenRecordset("T_NhatKy", dbOpenTable)
Set so = 1
If rs.RecordCount > 0 Then
rs.MoveFirst
Me.SOCTX.Value = Nz(Me.MACT.Column(1), "") & Format(Me.NGAYCT, "mm") & FnFixSOCT(Me.SOCTX) & so
Do Until rs.EOF
so = so + 1
Me.SOCTX.Value = Nz(Me.MACT.Column(1), "") & Format(Me.NGAYCT, "mm") & FnFixSOCT(Me.SOCTX) & so
rs.MoveNext
Loop
End If
rs.Close
End Sub
Nhưng khi bấm vào nút thì ko thấy báo lỗi cả không thấy nó đặt lại số chứng từ.
Còn cái hàm FnFixSoCT như sau:
Function FnFixSOCT(SOCT As String) As String
Dodai = Val(Syscode(15)): FnFixSOCT = Right("0000000000" & SOCT, Dodai)
End Function
Xin giúp đỡ -
RE: Tao nút tu dong dánh lai số CT
ongke0711 > 02-08-16, 11:50 PM
Bạn đang nhầm lẫn giữ xử lý control trên form và xử lý ngầm trên Recordset.
- Bạn muốn tạo số CTX hàng loạt cho table "T_NhatKy" thì phải dùng cặp rs.Edit ... rs.Update.
- Thay thế Me.SOCTX.Value => rs!SOCTX
------------------------------------------------------------
Private Sub Cmd1_Click()
Dim rs As Recordset
Dim so As Integer
Set rs = CurrentDb.OpenRecordset("T_NhatKy", dbOpenTable)
so = 1
If rs.RecordCount > 0 Then
rs.MoveFirst
End if
rs.Edit
Do Until rs.EOF
Me.SOCTX.Value = Nz(Me.MACT.Column(1), "") & Format(Me.NGAYCT, "mm") & FnFixSOCT(Me.SOCTX) & so
so = so + 1
rs.Update
rs.MoveNext
Loop
rs.Close
End Sub -
RE: Tao nút tu dong dánh lai số CT
khanh > 03-08-16, 10:30 AM
Mình đã sửa lại nhưng nó vẫn ko chạy và cũng ko báo lỗi ^^
Private Sub Cmd1_Click()
Dim rs As Recordset
Dim so As Integer
Set rs = CurrentDb.OpenRecordset("T_NhatKy", dbOpenTable)
Set so = 1
If rs.RecordCount > 0 Then
rs.MoveFirst
End If
rs.Edit
Do Until rs.EOF
rs!SOCTX = Nz(Me.MACT.Column(1), "") & Format(Me.NGAYCT, "mm") & FnFixSOCT(Me.SOCTX) & so
so = so + 1
rs.Update
rs.MoveNext
Loop
rs.Close
End Sub -
RE: Tao nút tu dong dánh lai số CT
khanh > 03-08-16, 10:32 AM
Mà hỏi thêm là chỗ CurrentDb.OpenRecordset("T_NhatKy", mình thấy có nhiều loại dbopen ?) Làm sao phân biệt cái nào -
RE: Tao nút tu dong dánh lai số CT
ongke0711 > 03-08-16, 10:53 AM
Tôi quên kiểm tra công thức tạo số tự động của bạn. Các tham số trường bạn phải lấy tên trường trong table "T_NhatKy" chứ không phải lấy textbox trên form.
so=1 -> không phải "Set so=1"
rs!SOCTX = Nz(Me!MACT, "") & Format(Me!NGAYCT, "mm") & Right("00000" & so,5)
Nếu T_NhatKy của bạn có trường MACT không phải ký tự "PC" thì bạn phải thay đổi Recordset thành 1 Select query có trường MaCT là "PC".
- Tham số "dbOpenDynaset" là dùng cho các file mdb sử dụng Linked Table, "dbOpenTable" là dùng cho file mdb sử dụng table trong chính CSDL đó luôn. -
RE: Tao nút tu dong dánh lai số CT
khanh > 03-08-16, 11:07 AM
Recordset mình là dạng biến động. MaCT nó có nhiều loại "PT", PC", ...
trong Table T_Nhatky là SoCT còn trong Form cái textbox mình đặt là SoCTX
Mình cũng đã sửa lại thay thế
rs!SoCT = .... nhưng nó vẫn ko chạy, ko lỗi -
RE: Tạo nút tự động đánh lại số CT
ongke0711 > 03-08-16, 12:40 PM
Bạn upload dữ liệu mẫu lên đây để dễ kiểm tra. -
RE: Tạo nút tự động đánh lại số CT
khanh > 03-08-16, 01:01 PM
http://upfile.vn/6rXCKVBCNQIQ/new-micros...accdb.html
Đây là file mình tu làm ở ngoài nó cũng tương tự mà chạy cũng ra @@ -
RE: Tạo nút tự động đánh lại số CT
ongke0711 > 03-08-16, 01:37 PM
Bạn xem, file đính kèm.
Link: http://www.mediafire.com/download/cj8tsr...SoCT.accdb
Ngoài việc dùng VBA code, bạn dùng Update query cũng được.
Mã PHP:UPDATE TblCT SET TblCT.MAQL = [MaLoaiCT] & Format([NgayCT],"mm") & Right("00000" & [SoCT],5);
-
RE: Tạo nút tự động đánh lại số CT
khanh > 03-08-16, 03:27 PM
cảm ơn bạn.
Nếu thêm 1 phần tử nữa mà ngày nhỏ hơn. sắp xếp tăng dần theo ngày thì số ct lại nhảy sai.