Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Thủ Thuật] Liên kết dữ liệu giữa subform và mainform
#1
Hi các bạn. Mình tk 1 form trong đó có tất cả cac source từ 1 table và 1 subform là kết quả của việc lọc dữ liệu theo đk nào đó. Cái khó khăn là mình không biết cách liên kết giữa sub và main. Tức là khi click vào 1 dòng record trên sub. Thì lập tức hiển thị toàn bộ control source tương ứng trên main. Với text unbound thì mình  có tham khảo trên diễn đàn. Nhung nếu sub đó là 1 query thì mình chưa biết giải quyết sao. Nhờ các bạn giúp nhé
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#2
Có bạn nào có cao kiến nào giúp mình không
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#3
(27-02-16, 11:08 AM)tvn_hut Đã viết: Hi các bạn. Mình tk 1 form trong đó có tất cả cac source từ 1 table và 1 subform là kết quả của việc lọc dữ liệu theo đk nào đó. Cái khó khăn là mình không biết cách liên kết giữa sub và main. Tức là khi click vào 1 dòng record trên sub. Thì lập tức hiển thị toàn bộ control source tương ứng trên main. Với text unbound thì mình  có tham khảo trên diễn đàn. Nhung nếu sub đó là 1 query thì mình chưa biết giải quyết sao. Nhờ các bạn giúp nhé

Câu này bạn viết hơi khó hiểu: "hiển thị toàn bộ control source tương ứng trên main" ?
Nếu bạn muốn khi click vào một dòng nào  trên subform sẽ hiển thị dữ liệu của record đó trên main form thì có thể code cho sự kiện On Current của subform tương tự như sau:

Mã:
Private Sub Form_Current()
    If Not Me.NewRecord Then
        Me.Parent.Filter = "ID = " & Nz(Me.txtID, 0)
        Me.Parent.FilterOn = True
    End If
End Sub

Với trường ID là khóa chính của record ,  txtID là textBox trên subform có source là ID . Bạn tùy biến nhé!
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn tvn_hut
#4
(28-02-16, 10:39 PM)MatTroiNguQuen Đã viết:
(27-02-16, 11:08 AM)tvn_hut Đã viết: Hi các bạn. Mình tk 1 form trong đó có tất cả cac source từ 1 table và 1 subform là kết quả của việc lọc dữ liệu theo đk nào đó. Cái khó khăn là mình không biết cách liên kết giữa sub và main. Tức là khi click vào 1 dòng record trên sub. Thì lập tức hiển thị toàn bộ control source tương ứng trên main. Với text unbound thì mình  có tham khảo trên diễn đàn. Nhung nếu sub đó là 1 query thì mình chưa biết giải quyết sao. Nhờ các bạn giúp nhé

Câu này bạn viết hơi khó hiểu: "hiển thị toàn bộ control source tương ứng trên main" ?
Nếu bạn muốn khi click vào một dòng nào  trên subform sẽ hiển thị dữ liệu của record đó trên main form thì có thể code cho sự kiện On Current của subform tương tự như sau:

Mã:
Private Sub Form_Current()
    If Not Me.NewRecord Then
        Me.Parent.Filter = "ID = " & Nz(Me.txtID, 0)
        Me.Parent.FilterOn = True
    End If
End Sub

Với trường ID là khóa chính của record ,  txtID là textBox trên subform có source là ID . Bạn tùy biến nhé!

 Cám ơn bạn rất nhiều. Bạn hiểu đúng vấn đề của mình. đúng là khi nháy chuột vào dòng nào là có thể hiện lên trên main form tương ứng với dữ liệu đó. Tuy nhiên sau khi thực hiện lọc dữ liệu trên subform mình có nháy chuột vào các dòng dữ liệu thì con trỏ luôn nhảy về record trên cùng. mặc dù dữ liệu có thay đổi theo. làm thế nào giải quyết nó nhỉ
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#5
(28-02-16, 11:44 PM)tvn_hut Đã viết:  Cám ơn bạn rất nhiều. Bạn hiểu đúng vấn đề của mình. đúng là khi nháy chuột vào dòng nào là có thể hiện lên trên main form tương ứng với dữ liệu đó. Tuy nhiên sau khi thực hiện lọc dữ liệu trên subform mình có nháy chuột vào các dòng dữ liệu thì con trỏ luôn nhảy về record trên cùng. mặc dù dữ liệu có thay đổi theo. làm thế nào giải quyết nó nhỉ

-Điều kiện lọc của subform là gì? "con trỏ nhảy về record trên cùng" thường là do lệnh Requery hoặc Refresh
 MTNQ không có file của bạn nên khó hỗ trợ. Bạn up file lên hoặc gởi qua mail: mattroinguquensgvn@Gmail.com, mình xem giúp cho.
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#6
(29-02-16, 08:06 AM)MatTroiNguQuen Đã viết:
(28-02-16, 11:44 PM)tvn_hut Đã viết:  Cám ơn bạn rất nhiều. Bạn hiểu đúng vấn đề của mình. đúng là khi nháy chuột vào dòng nào là có thể hiện lên trên main form tương ứng với dữ liệu đó. Tuy nhiên sau khi thực hiện lọc dữ liệu trên subform mình có nháy chuột vào các dòng dữ liệu thì con trỏ luôn nhảy về record trên cùng. mặc dù dữ liệu có thay đổi theo. làm thế nào giải quyết nó nhỉ

-Điều kiện lọc của subform là gì? "con trỏ nhảy về record trên cùng" thường là do lệnh Requery hoặc Refresh
 MTNQ không có file của bạn nên khó hỗ trợ. Bạn up file lên hoặc gởi qua mail: mattroinguquensgvn@Gmail.com, mình xem giúp cho.

Ok cam ơn bạn nhiều. Tối nay về mình làm rồi gửi cho bạn nhé
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#7
hi cả nhà. loay hoay vẫn chưa tìm được cách giải quyết. mình dùng qry để thực hiện lọc và làm theo hướng dẫn của Mattroinguquen. Việc liên kết hoàn toàn OK nhưng mỗi khi nháy chuột vào 1 record tại subform thì focus lại nhảy ngay về dong record đầu tiên. và khi quay lại nháy chuột vào dòng đầu tiên thì qhe với mainfrm lại không được. nó không hiển thị nội dung trên main. mình muốn khi chỉ vào record nào trên sub thì hiển thị nội dung trên main và con trỏ chuột giữ nguyên tại dòng record đó. làm  cách nào để control nó nhỉ. đây là picture thể hiện vấn đề của mình:
Picture

Còn code mình dùng tại subfrm như sau:
Mã PHP:
Private Sub Form_Current()
 

   If Not Me.NewRecord Then
      Me
.Parent.Filter "[TagNo] = '" Nz(Me.TagNo0) & "'"
      Me.Parent.FilterOn True
   End 
If


End Sub 
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#8
Form của bạn không dùng cách trên được, để đáp ứng được các yêu cầu như bạn nói thì làm như sau:

1/Bỏ điều kiện lọc của subform (xóa DK trong query Qryupdate)

2/Code cho sự kiện AfterUpdate của Cobline và Cobgrp như sau:

Mã:
Private Sub Cobline_AfterUpdate()
   ApplyFilter
End Sub

Private Sub Cobgrp_AfterUpdate()
   ApplyFilter
End Sub

Private Sub ApplyFilter()
   Dim strFilter As String
   strFilter = "[Group] Like '*" & Me.[Cobgrp] & "'"
   strFilter = strFilter & " AND [Line] Like '*" & Me.[CobLine] & "'"
   'Debug.Print strFilter
   Me.Frmsubupdate.Form.Filter = strFilter
   Me.Frmsubupdate.Form.FilterOn = True
End Sub

3/Thủ tục Form_Current của subform sửa lại như sau:
Mã:
Private Sub Form_Current()
   Dim rs As DAO.Recordset
 
   Set rs = Me.Parent.Recordset.Clone
   rs.FindFirst "[Staffcode] = '" & Nz(Me.txtStaffcode, "") & "'"
   If Not rs.NoMatch Then
       Me.Parent.Bookmark = rs.Bookmark
   End If
 
   Set rs = Nothing
End Sub
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn tvn_hut
#9
(02-03-16, 12:14 PM)MatTroiNguQuen Đã viết: Form của bạn không dùng cách trên được, để đáp ứng được các yêu cầu như bạn nói thì làm như sau:

1/Bỏ điều kiện lọc của subform (xóa DK trong query Qryupdate)

2/Code cho sự kiện AfterUpdate của Cobline và Cobgrp như sau:

Mã:
Private Sub Cobline_AfterUpdate()
   ApplyFilter
End Sub

Private Sub Cobgrp_AfterUpdate()
   ApplyFilter
End Sub

Private Sub ApplyFilter()
   Dim strFilter As String
   strFilter = "[Group] Like '*" & Me.[Cobgrp] & "'"
   strFilter = strFilter & " AND [Line] Like '*" & Me.[CobLine] & "'"
   'Debug.Print strFilter
   Me.Frmsubupdate.Form.Filter = strFilter
   Me.Frmsubupdate.Form.FilterOn = True
End Sub

3/Thủ tục Form_Current của subform sửa lại như sau:
Mã:
Private Sub Form_Current()
   Dim rs As DAO.Recordset
 
   Set rs = Me.Parent.Recordset.Clone
   rs.FindFirst "[Staffcode] = '" & Nz(Me.txtStaffcode, "") & "'"
   If Not rs.NoMatch Then
       Me.Parent.Bookmark = rs.Bookmark
   End If
 
   Set rs = Nothing
End Sub
Cám Ơn MTNQ rất nhiều. Problem đã được giải quyết. nếu bạn ở HCM mình mời 1 bữa cà phê nhé happy 007
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#10
Theo câu hỏi của bạn thì chỉ cần tạo 1 form dạng Sliptform của Access 2007 là đủ đáp ứng nhu cầu, slipt form thể hiện lưới dữ liệu (trên hoặt dưới form), các điều khiển nhập liệu nằm tách biệt, khi ta click chuột vào record (dòng) nào trên lưới thì các điều khiển sẽ hiện dữ liệu tương ứng (bạn không cần phải viết mã lệnh xử lý).
Nhân dây tôi cũng xin góp ý là các bạn nào đang dùng Access XP (2002) hoặc Access 2003 thì nên chuyển sang cài bản Access 2007 để tận dụng các tính năng mới (có rất nhiều tính năng của Access 2007 rất hay mà nếu ta dùng bản cũ hơn phải lập trình rất mệt), dung lượng file *.accdb của Access 2007 nhẹ hơn định dạng *.mdb gần gấp 3 lần, tốc độ xử lý nhanh hơn, giao diện đẹp...
Chữ ký của lmthu Xin chào, mình là lmthu, Tham gia http://thuthuataccess.com/forum từ ngày 04-07 -14.
Reply
Những người đã cảm ơn tvn_hut


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại. MinhnHang 6 304 29-11-16, 09:11 PM
Bài mới nhất: ongke0711
  Tránh xung đột dữ liệu trong access quocdung9999 16 1,692 23-11-16, 11:13 AM
Bài mới nhất: quocdung9999
  [Thủ Thuật] Tạo thanh tiến trình trên Form (Progress bar) khi xử lý dữ liệu ongke0711 18 1,500 21-10-16, 10:17 PM
Bài mới nhất: ongke0711
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 42 17,037 12-06-16, 12:28 PM
Bài mới nhất: lehongduc
  [Thủ Thuật] Lưu vết chương trình khi nhập liệu n2kp 38 9,742 06-05-16, 12:01 PM
Bài mới nhất: hungle2006

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ơ