• Tạo nút tự động đánh lại số CT
  • Tạo nút tự động đánh lại số CT

    khanh > 02-08-16, 05:57 PM

    [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 đỡ
  • 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 happy
  • 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.
    [Hình: kzTarym.png]