yamakashi2003 > 27-09-20, 10:34 AM
tranthanhan1962 > 27-09-20, 12:34 PM
ongke0711 > 28-09-20, 12:40 AM
(27-09-20, 10:34 AM)yamakashi2003 Đã viết: Giả sử bài toán là: khi ấn 1 button thì nó sẽ tìm trong subform mã SKU = 3661033 rồi trả về tên sản phẩm tương ứng ở subform vào txttensp ở mainform
Nhờ bác nào biết chỉ giúp em code truy vấn trực tiếp đến subform mà không phải thông qua table nguồn của subform ạ
Hiện em đang dùng code này nhưng thấy nó phải qua truy vấn đến table rồi mới hiển thị trên form. Nên hơi lòng vòng
Dim rs As DAO.Recordset
Dim strCriteria As String
strCriteria = "SKU =" & Me.txtSKUTimKiem
Set rs = Me.SubformABC.Form.RecordsetClone
rs.FindFirst strCriteria
If rs.NoMatch Then
Msgbox "Khong tim thay"
Else
Me.txtTenSP = rs!TenSP
End If
yamakashi2003 > 28-09-20, 10:29 AM
(27-09-20, 12:34 PM)tranthanhan1962 Đã viết: Trước hết bạn phả chuyển con trỏ vào SubForm:Em cảm ơn 2 bác ạ,
Subform.SetFocus
Đối với form có recordsource thay vì truy cập vào table nguồn bạn có thể dùng
rs=Me.RecordsetClone
Me.RecordsetClone chính là nguồn recordset của form mà không cần biết nó table hay query
Bạn chỉ cần theo cú pháp:
Dim rs As Recordset
Set rs = Me.RecordsetClone
Sau này bạn lam gì với record source cũng được. Nó chỉ biết đến record source hiện hành của form
=>
Set rs = Me.RecordsetClone
Do While Not rs.EOF
If rs!SKU = 3661033 > 0 Then
me.txttensp = rs!TenSP
rs.MoveNext
Else
rs.MoveNext
End If
Loop
Me.Refresh
Cũng có cách khác:
Tạo một textbox TongRecord có giá trị =Count([FieldX]). FieldX là field bất kỳ của subform. Mục đích lấy tổng số record trên subform.
Subform.SetFocus
DoCmd.GoToRecord , , acFirst
Do While Me.CurrentRecord<>TongRecord
If SKU.Value = 3661033 > 0 Then
me.txttensp = TenSP.Value
DoCmd.GoToRecord , , acNext
Else
DoCmd.GoToRecord , , acNext
End If
Loop
Me.Refresh
yamakashi2003 > 28-09-20, 10:42 AM
(27-09-20, 12:34 PM)tranthanhan1962 Đã viết: Trước hết bạn phả chuyển con trỏ vào SubForm:Bác cho em hỏi trong đoạn này nếu muốn bôi đen toàn bộ record có SKU thõa mãn điều kiện thì làm như thế nào ạ
Cũng có cách khác:
Tạo một textbox TongRecord có giá trị =Count([FieldX]). FieldX là field bất kỳ của subform. Mục đích lấy tổng số record trên subform.
Subform.SetFocus
DoCmd.GoToRecord , , acFirst
Do While Me.CurrentRecord<>TongRecord
If SKU.Value = 3661033 > 0 Then
me.txttensp = TenSP.Value
DoCmd.GoToRecord , , acNext
Else
DoCmd.GoToRecord , , acNext
End If
Loop
Me.Refresh
tranthanhan1962 > 28-09-20, 01:54 PM
yamakashi2003 > 02-10-20, 11:29 PM
(28-09-20, 01:54 PM)tranthanhan1962 Đã viết: Bạn có thể dùng Conditional Formatting để xử lý vấn đề nàyBác ơi cho em hỏi:
yamakashi2003 > 03-10-20, 01:59 PM
(02-10-20, 11:29 PM)yamakashi2003 Đã viết:có ai giúp em với(28-09-20, 01:54 PM)tranthanhan1962 Đã viết: Bạn có thể dùng Conditional Formatting để xử lý vấn đề nàyBác ơi cho em hỏi:
HIện em đang dung subform để hiển thị dữ liệu, và em để dạng data sheet để lọc các cột theo ý mình cho nhanh,
Sau khi lọc xong thi em copy toàn bộ dữ liệu đã được lọc ở subform vào 1 bảng tạm (giả sử tableTam) có cấu trúc y hệt subform
sau đó em mới chạy 1 report có nguồn từ tableTam đó
Vậy có đoạn code nào có thể copy dữ liệu đang hiển thị ở subfrom (đã được lọc) vào bảng tạm không ạ
Còn code để chạy report thì em biết rồi ạ
Nhờ bác giúp đỡ, em xin cảm ơn ạ
ongke0711 > 03-10-20, 05:04 PM
(03-10-20, 01:59 PM)yamakashi2003 Đã viết: HIện em đang dung subform để hiển thị dữ liệu, và em để dạng data sheet để lọc các cột theo ý mình cho nhanh,
Sau khi lọc xong thi em copy toàn bộ dữ liệu đã được lọc ở subform vào 1 bảng tạm (giả sử tableTam) có cấu trúc y hệt subform
sau đó em mới chạy 1 report có nguồn từ tableTam đó
Vậy có đoạn code nào có thể copy dữ liệu đang hiển thị ở subfrom (đã được lọc) vào bảng tạm không ạ
Còn code để chạy report thì em biết rồi ạ
Nhờ bác giúp đỡ, em xin cảm ơn ạ
Trích dẫn:có ai giúp em với
hay là việc copy dữ liệu trực tiếp từ subform (không thông qua table nguồn) sang table khác có cấu trúc y hệt, là không thực hiện bằng code được ạ
Mong các tiền bối chỉ giúp em
DoCmd.OpenReport "rptABC", acViewPreview, , Me.sfmABC.Form.Filter, acWindowNormal
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Forms![frmMainABC]![sfmABC].Form.RecordSource
End Sub
yamakashi2003 > 03-10-20, 08:33 PM
(03-10-20, 05:04 PM)ongke0711 Đã viết:Em cám ơn bác, do em nghĩ là khi filter thì report sẽ luôn hiển thị hết dữ liệu của table, hoặc query ạ(03-10-20, 01:59 PM)yamakashi2003 Đã viết: HIện em đang dung subform để hiển thị dữ liệu, và em để dạng data sheet để lọc các cột theo ý mình cho nhanh,
Sau khi lọc xong thi em copy toàn bộ dữ liệu đã được lọc ở subform vào 1 bảng tạm (giả sử tableTam) có cấu trúc y hệt subform
sau đó em mới chạy 1 report có nguồn từ tableTam đó
Vậy có đoạn code nào có thể copy dữ liệu đang hiển thị ở subfrom (đã được lọc) vào bảng tạm không ạ
Còn code để chạy report thì em biết rồi ạ
Nhờ bác giúp đỡ, em xin cảm ơn ạTrích dẫn:có ai giúp em với
hay là việc copy dữ liệu trực tiếp từ subform (không thông qua table nguồn) sang table khác có cấu trúc y hệt, là không thực hiện bằng code được ạ
Mong các tiền bối chỉ giúp em
Vấn đề này của bạn rất đơn giản.
- Thứ nhất cần làm rõ lý thuyết lại: bạn nói "copy dữ liệu từ Subform.." thực chất nó chính là dữ liệu từ Form Record Source và nó cũng là Table hoặc Query thôi vì Form của bạn là Bound Form. Không thể tách rồi ra nói dữ liệu của Subform với dữ liệu Table/Query gốc được. Nếu là Unbound Form thì dữ liệu hiển thị trên Form mới là dữ liệu của các Controls (textbox, combobox...) trên form vì không gắn với RecordSouce nào cả.
- Thứ hai, bạn muốn chạy Report có nguồn từ cái Datasheet Form vừa được lọc (filtered) thì cần gì phải qua bước tạo Table tạm chi cho mất thời gian, bộ nhớ, bạn lấy thẳng nguồn của Datasheet Form là Record Souce cho Report luôn.
Code cho nút lệnh "In report": sau khi bạn đã lọc, sort các kiểu trên Subform Datasheet.
Mã PHP:DoCmd.OpenReport "rptABC", acViewPreview, , Me.sfmABC.Form.Filter, acWindowNormal
Đối với Report: lấy nguồn từ Subform
Mã PHP:Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Forms![frmMainABC]![sfmABC].Form.RecordSource
End Sub