• Xin giúp đỡ về VBA Access !
  • RE: Xin giúp đỡ về VBA Access !

    ongke0711 > 10-07-16, 10:26 PM

    1. Gán data cho subform: Bạn sử dụng Link Master/Child field
    - Theo file của bạn, cái subform SF_TimChiTietPhieuNhap sẽ link với Main form thông qua Master field là 1 textbox thể hiện [Mã Phiếu Nhập]. Vd textbox này đặt tên là txtMaPN
    - Để tạo cái textbox trên main form cập nhật [Mã PN] khi click vào Phiếu nhập trong subform bạn dùng code sau: trong event Click của textbox [MaPN] trong subform (copy cho cả 3 subform)
    Mã PHP:
    Private Sub MaPN_Click()
       Me.Parent!txtMaPN Me.MaPN
    End Sub 

    2. Thay vì bạn thiết kế 3 subform trên main form, bạn có thể chỉ cần vẽ 1 subform sau đó ở mỗi sự kiện sẽ thay đổi Source Object của subform này tương ứng với 3 subform đã tạo. 
    VD: vẽ 1 subform tổng đặt tên là sfmTong
    - Khi Tìm theo Ngày tháng click thì
         Me.sfmTong.SourceObject = "SF_PNtheoNgayThang"
    - Khi Tìm theo Nhân viên
         Me.sfmTong.SourceObject = "SF_PNtheoNV"

    Một cách khác nữa là bạn chỉ cần thiết kế 1 subform, khi thay đổi điều kiện tìm kiếm thì thay đổi RecordSource của sbuform theo điều kiện tương ứng.
    Form tìm kiếm kiểu này thì trên diễn đàn rất nhiều bài hay lắm đó. Bạn tìm và tham khảo đi. 
    Gợi ý của tôi là bạn làm lại cái form tìm kiếm chỉ cần 1 subform và kết hợp với cái subform chi tiết là được rồi. Cách của bạn làm hiện tại hơi rườm rà đó. 
  • RE: Xin giúp đỡ về VBA Access !

    vocan > 11-07-16, 04:55 PM

    (10-07-16, 10:26 PM)ongke0711 Đã viết: 1. Gán data cho subform: Bạn sử dụng Link Master/Child field
    - Theo file của bạn, cái subform SF_TimChiTietPhieuNhap sẽ link với Main form thông qua Master field là 1 textbox thể hiện [Mã Phiếu Nhập]. Vd textbox này đặt tên là txtMaPN
    - Để tạo cái textbox trên main form cập nhật [Mã PN] khi click vào Phiếu nhập trong subform bạn dùng code sau: trong event Click của textbox [MaPN] trong subform (copy cho cả 3 subform)
    Mã PHP:
    Private Sub MaPN_Click()
       Me.Parent!txtMaPN Me.MaPN
    End Sub 

    2. Thay vì bạn thiết kế 3 subform trên main form, bạn có thể chỉ cần vẽ 1 subform sau đó ở mỗi sự kiện sẽ thay đổi Source Object của subform này tương ứng với 3 subform đã tạo. 
    VD: vẽ 1 subform tổng đặt tên là sfmTong
    - Khi Tìm theo Ngày tháng click thì
         Me.sfmTong.SourceObject = "SF_PNtheoNgayThang"
    - Khi Tìm theo Nhân viên
         Me.sfmTong.SourceObject = "SF_PNtheoNV"

    Một cách khác nữa là bạn chỉ cần thiết kế 1 subform, khi thay đổi điều kiện tìm kiếm thì thay đổi RecordSource của sbuform theo điều kiện tương ứng.
    Form tìm kiếm kiểu này thì trên diễn đàn rất nhiều bài hay lắm đó. Bạn tìm và tham khảo đi. 
    Gợi ý của tôi là bạn làm lại cái form tìm kiếm chỉ cần 1 subform và kết hợp với cái subform chi tiết là được rồi. Cách của bạn làm hiện tại hơi rườm rà đó. 

    Cảm ơn bạn đã giúp đỡ !
    Mình có tìm kiếm trên diễn đàn , và định làm theo hướng làm 1 subform có recordsoure thay đổi theo điều kiện  nhưng làm hoài vẫn bị báo lỗi hix
    bạn xem giúp mình sai chỗ nào với , và cách viết như vậy có đúng không

    https://drive.google.com/file/d/0BwUQpIi...sp=sharing

    Mã:
    Private Sub Timphieu_Click()

    Dim strsql1, strsql2, strsql3 As String
    Set strsql1 = "SELECT T_Nhap.MaPN, T_Nhap.NgayNhap, T_Nhap.MaNV, T_NV.TenNV FROM T_NV INNER JOIN T_Nhap ON T_NV.MaNV = T_Nhap.MaNV WHERE T_Nhap.MaNV='" & [Forms]![F_Quanlyphieunhap]![nvn] & "'"
    Set strsql2 = "SELECT T_Nhap.MaPN, T_Nhap.NgayNhap, T_Nhap.MaNV, T_NV.TenNVFROM T_NV INNER JOIN T_Nhap ON T_NV.MaNV = T_Nhap.MaNV WHERE T_Nhap.NgayNhap>='" & [Forms]![F_Quanlyphieunhap]![tn] & "' And (T_Nhap.NgayNhap)<='" & [Forms]![F_Quanlyphieunhap]![dn] & "'"
    ''Set strsql3 = "SELECT T_Nhap.MaPN, T_Nhap.NgayNhap, T_Nhap.MaNV, T_NV.TenNV FROM T_NV INNER JOIN T_Nhap ON T_NV.MaNV = T_Nhap.MaNV WHERE (T_Nhap.MaPN)='" & [Forms]![F_Quanlyphieunhap]![nvn] & "' AND T_Nhap.NgayNhap)>='" & [Forms]![F_Quanlyphieunhap]![tn] & "' And T_Nhap.NgayNhap<='" & [Forms]![F_Quanlyphieunhap]![dn] & "'"

    If TK = "Nhan vien Nhap" Then
    Me.SF_timkiemphieunhap.Form.RecordSource = strsql1
    Else
    If TK = "Ngay Thang" Then
    Me.SF_timkiemphieunhap.Form.RecordSource = strsql2
    Else
    If TK = "NV Nhap-Ngay Thang" Then
    Me.SF_timkiemphieunhap.Form.RecordSource = strsql3
    End If
    End If
    End If
    Me.SF_timkiemphieunhap.Form.Requery

    End Sub

    Thứ 2 , làm sao để hiện thị được chi tiết phiếu nhập khi mình ấn bên SF_timkiemphieunhap , hoặc sự kiện click một nút thì bên SF_chitietphieunhap se hiện thị thông tin tại vi trị con tro ở SF_timkiemphieunhap
    Cảm ơn nhiều!
  • RE: Xin giúp đỡ về VBA Access !

    ongke0711 > 11-07-16, 10:45 PM

    1. Câu lệnh SQL tìm kiếm của bạn sai ở từ "Set": Set strsql11=...
    - "SET" chi dùng khi gán biến cho 1 đối tượng (Object). Vd: Set db = CurrentDb.
    - Câu lệnh SQL cho 3 trường hợp này giống nhau gần hết chỉ khác phần điều kiện WHERE. Do vậy để rút gọn thì bạn chỉ cần thêm 1 biến điều kiện (vd: Dim dieukienloc as String) và thay đổi nó tùy theo từng trường hợp tìm kiếm.
    - Bạn chú ý chỗ phần bẫy lỗi khi textbox [nhân viên nhập] hoặc textbox [Từ ngày] [Đến ngày]. Nếu các textbox này để trống sẽ báo lỗi câu lệnh SQL khi bấm [Tìm kiếm].

    Mã PHP:
    Private Sub Timphieu_Click()

       Dim strSQL As Stringdieukienloc As String
       Select 
    Case Me.TK
           Case 1 
    'Tim theo nhan vien nhap'
               dieukienloc "T_Nhap.[MaNV]='" Me.nvn "'"
           Case 2 'Tim theo ngay thang'
               dieukienloc "[NgayNhap] BETWEEN #" Me.tn "# AND #" Me.dn "#"
           Case 3 ' Tim theo NV + Ngay thang'
               If IsNull(Me.tn) Or Me.tn "" Or IsNull(Me.dn) Or Me.dn "" Then
                   MsgBox 
    "Ban phai nhap thong tin [Tu ngay], [Den ngay]"vbCritical"Thông báo"
                   Me.tn.SetFocus
                   Exit Sub
               End 
    If
               dieukienloc "T_Nhap.[MaNV]='" Me.nvn "' AND [NgayNhap] BETWEEN #" Me.tn "# AND #" Me.dn "#"
       End Select
       
       strSQL 
    "SELECT T_Nhap.*, T_NV.TenNV " _
               
    "FROM T_NV INNER JOIN T_Nhap ON T_NV.MaNV = T_Nhap.MaNV " _
               
    "WHERE " dieukienloc

       Me
    .SF_timkiemphieunhap.Form.RecordSource strSQL

    End Sub 

    - Bạn phải ngâm cứu lại cách sử dụng combobox cơ bản (về cách tạo Row Source dạng Value list, Table/Query). Nó rất quan trọng vì form sử dụng nó rất nhiều.
    [Hình: combo.png]


    2. Làm sao hiển thị chi tiết Phiếu Nhập khi click bên subform tìm kiếm: Bạn không đọc kỹ bài post trước, tôi đã hướng dẫn là bạn ngâm cứu cách dùng link master/child field giữa Main form và Sub form.

    File demo của bạn đây: http://www.mediafire.com/download/nxxonv..._DV1.accdb