Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Tạo nút tự động đánh lại số CT
#1
Photo 
[Hình: 1wrXmOm.png]
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 đỡ
Reply
Những người đã cảm ơn
#2
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
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn khanh , maidinhdan
#3
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
Chữ ký của khanh khanh,gia nhập Thủ Thuật Access từ 02-08 -16.
Reply
Những người đã cảm ơn
#4
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
Chữ ký của khanh khanh,gia nhập Thủ Thuật Access từ 02-08 -16.
Reply
Những người đã cảm ơn
#5
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.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn khanh , maidinhdan
#6
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 happy
Chữ ký của khanh khanh,gia nhập Thủ Thuật Access từ 02-08 -16.
Reply
Những người đã cảm ơn
#7
Bạn upload dữ liệu mẫu lên đây để dễ kiểm tra.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
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 @@
Chữ ký của khanh khanh,gia nhập Thủ Thuật Access từ 02-08 -16.
Reply
Những người đã cảm ơn
#9
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); 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Che_Guevara , khanh
#10
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.
[Hình: kzTarym.png]
Chữ ký của khanh khanh,gia nhập Thủ Thuật Access từ 02-08 -16.
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
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
  Xin giúp tạo 1 trường trong table đánh số tự động thay cho autonumber trungminh 7 450 16-09-16, 05:17 PM
Bài mới nhất: maidinhdan
  [Hỏi] Hỏi cách chọn combobox tự động cannguyen 6 585 03-06-16, 11:40 PM
Bài mới nhất: cannguyen
  [Help] Tự động lưu dữ liệu trên textbox vào table jason 34 2,708 22-05-16, 11:39 AM
Bài mới nhất: thanhtruong
  Hướng Dẫn Mở form chính và đồng thời mở form phụ khi ngày tháng đến hạn jeck09nt 1 166 17-03-16, 11:11 AM
Bài mới nhất: lmthu

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ơ