• Nhận giá trị các dòng trong subform khi nhấn xóa
  • Nhận giá trị các dòng trong subform khi nhấn xóa

    AnNguyen > 29-10-20, 06:29 PM

    làm sao để khi chọn nhiều dòng trong subform rồi bấm nút delete trên bàn phím nó trả về số giá trị từng dòng đã được chọn xong rồi mới thực hiện thao tác xong ạ?
  • RE: Nhận giá trị các dòng trong subform khi nhấn xóa

    ongke0711 > 30-10-20, 12:29 AM

    Đối với việc hiện thị ID (tạm gọi) của các dòng được chọn trong Subform thì dùng 2 phương thức của Form là: 
    - SelTop: vị trí record đầu tiên của vùng chọn
    - SelHeight: Vị trí cuối cùng của vùng chọn
    Cách làm này chỉ áp dụng đối với việc chọn các dòng liên tiếp nhau thì được, nếu chọn dòng cách khoảng thì tôi phải dùng thêm cột phụ dạng Yes/No trong Table để xác định dòng được chọn.

    Dưới đây là tôi demo cho bạn cách 1. Code như sau.

    - Code trong Main Form:

    Mã PHP:
    Option Explicit

    Private mlngSelTop As Long      'Vi tri Record duoc chon dau tien'
    Private mlngSelheight As Long  'Vi tri Record cuoi trong danh sach chon'

    Public Function DeleteIDList() As String

    '# Hàm dùng de lay danh sach cac records duoc chon trong Subform dang DataSheet hoac Continuous Form.'
    '# Phai ket hop voi event Subform_Exit de lay vi tri record dau (SelTop) và cuôi (Selheight) cua danh chon chon,'
    '  vì khi thoat khoi Subform thì vùng chon cung bien mat'

        Dim rs As DAO.Recordset
        Dim frm 
    As Access.Form
        Dim strX 
    As String
        Dim i 
    As Long

        Set frm 
    Me.sfmSYLL.Form
        Set rs 
    frm.RecordsetClone

        
    If mlngSelheight 0 Then Exit Function 'Subform không focus -> không xu ly'

        rs.MoveFirst
        rs
    .Move mlngSelTop 1  'Di chuyen den Record duoc chon dau tien'

        For 1 To mlngSelheight
            strX 
    strX rs![Ten] & ", "
            rs.MoveNext
        Next i
        strX 
    Left$(strXLen(strX) - 2)
        
        DeleteIDList 
    strX
        MsgBox strX
        
    End 
    Function

    Private 
    Sub sfmSYLL_Exit(Cancel As Integer)
        With sfmSYLL.Form
            mlngSelheight 
    = .SelHeight
            mlngSelTop 
    = .SelTop
        End With
    End Sub 



    - Code trong Subform: để bắt sự kiện bấm nút "Delete". Trong code này tôi có thiết lập SetFocus vào một Textbox khác trên Main form để kích hoạt sự kiện On Exit của Subform. Bạn có thể thiết lập focus vô bất cứ Control nào trên Main form.

    Mã PHP:
    Private Sub Form_KeyDown(KeyCode As IntegerShift As Integer)
        If KeyCode vbKeyDelete Then
            KeyCode 
    0
            Me
    .Parent.Text3.SetFocus
            Call Forms
    ("frmMain").DeleteIDList
        End 
    If
    End Sub 




    Link file: http://www.mediafire.com/file/u7cnx5rsb9...accdb/file
  • RE: Nhận giá trị các dòng trong subform khi nhấn xóa

    AnNguyen > 30-10-20, 10:21 AM

    (30-10-20, 12:29 AM)ongke0711 Đã viết: Đối với việc hiện thị ID (tạm gọi) của các dòng được chọn trong Subform thì dùng 2 phương thức của Form là: 
    - SelTop: vị trí record đầu tiên của vùng chọn
    - SelHeight: Vị trí cuối cùng của vùng chọn
    Cách làm này chỉ áp dụng đối với việc chọn các dòng liên tiếp nhau thì được, nếu chọn dòng cách khoảng thì tôi phải dùng thêm cột phụ dạng Yes/No trong Table để xác định dòng được chọn.

    Dưới đây là tôi demo cho bạn cách 1. Code như sau.

    - Code trong Main Form:

    Mã PHP:
    Option Explicit

    Private mlngSelTop As Long      'Vi tri Record duoc chon dau tien'
    Private mlngSelheight As Long  'Vi tri Record cuoi trong danh sach chon'

    Public Function DeleteIDList() As String

    '# Hàm dùng de lay danh sach cac records duoc chon trong Subform dang DataSheet hoac Continuous Form.'
    '# Phai ket hop voi event Subform_Exit de lay vi tri record dau (SelTop) và cuôi (Selheight) cua danh chon chon,'
    '  vì khi thoat khoi Subform thì vùng chon cung bien mat'

        Dim rs As DAO.Recordset
        Dim frm 
    As Access.Form
        Dim strX 
    As String
        Dim i 
    As Long

        Set frm 
    Me.sfmSYLL.Form
        Set rs 
    frm.RecordsetClone

        
    If mlngSelheight 0 Then Exit Function 'Subform không focus -> không xu ly'

        rs.MoveFirst
        rs
    .Move mlngSelTop 1  'Di chuyen den Record duoc chon dau tien'

        For 1 To mlngSelheight
            strX 
    strX rs![Ten] & ", "
            rs.MoveNext
        Next i
        strX 
    Left$(strXLen(strX) - 2)
        
        DeleteIDList 
    strX
        MsgBox strX
        
    End 
    Function

    Private 
    Sub sfmSYLL_Exit(Cancel As Integer)
        With sfmSYLL.Form
            mlngSelheight 
    = .SelHeight
            mlngSelTop 
    = .SelTop
        End With
    End Sub 



    - Code trong Subform: để bắt sự kiện bấm nút "Delete". Trong code này tôi có thiết lập SetFocus vào một Textbox khác trên Main form để kích hoạt sự kiện On Exit của Subform. Bạn có thể thiết lập focus vô bất cứ Control nào trên Main form.

    Mã PHP:
    Private Sub Form_KeyDown(KeyCode As IntegerShift As Integer)
        If KeyCode vbKeyDelete Then
            KeyCode 
    0
            Me
    .Parent.Text3.SetFocus
            Call Forms
    ("frmMain").DeleteIDList
        End 
    If
    End Sub 




    Link file: http://www.mediafire.com/file/u7cnx5rsb9...accdb/file

    Vâng em cảm ơn anh nhiều ạ.
    Em làm được rồi happy