Đình Phán > 10-06-22, 06:40 PM
cpucloi > 11-06-22, 06:09 AM
ongke0711 > 11-06-22, 10:43 AM
(10-06-22, 06:40 PM)Đình Phán Đã viết: Em muốn khi em nhập So_CTGS, Nam_CTGS tại sub form thì các thông tin So_Thung, So_Tap sẽ truy vấn tại tblCTGS để điền vào sub form.
Sở dĩ phải theo 2 điều kiện trên, vì So_CTGS được đánh theo các năm có thể giống nhau.
Em cũng không DLooKup được, do yêu cầu theo 2 điều kiện.
Đình Phán > 13-06-22, 09:23 AM
(11-06-22, 10:43 AM)ongke0711 Đã viết: Như bạn CPULoi đã nói ở trên, muốn xử lý dữ liệu đúng thì Table tblCTGS phải có field là khóa chính.
CSDL Access hoàn toàn khác với dữ liệu Excel vì đối với Excel nó chỉ được gọi là "dữ liệu" chứ không phải "Cơ sở dữ liệu quan hệ" như Access. Nó đòi hỏi dữ liệu phải chuẩn hóa, ít nhất cũng chuẩn hóa ở mức cấp 1. Bạn muốn làm việc với Access thì phải bỏ công xử lý lại dữ liệu thô trước khi đưa vào Table của Access. Chứ để như vậy mà làm thì nó không trả về kết quả đúng thì cũng không ai muốn xử lý giùm bạn.
Như bạn nói là phải kết hợp thông tin của cả 2 Field [Số CTGS] + [Năm] thì mới tìm ra đúng dòng dữ liệu cần thao tác, vậy tại sao bạn không tạo thêm một Field nữa (làm ngay trong Excel) có dữ liệu là kết hợp của 2 Field trên và dùng nó làm khóa chính (không trùng) trước khi import dữ liệu vào Access.
Tôi cũng đã xử lý cách trên vào Table hiện tại tblCTGS của bạn và phát hiện ra nhiều dữ liệu rác như:
- Thiếu số năm.
- Thiếu mã So_CTGS
- Trùng lập dữ liệu: cùng số Năm, So_CTSG cùng [ngay_CTGS] => có hơn 7.000 dòng trùng 3 field trên, chỉ khác User. Nếu bạn muốn DLookup dựa trên 2 field [So_CTGS] + [Nam] thì kết quả trả về là nhiều dòng giống nhau chứ không phải một dòng duy nhất, vậy biết lấy dòng nào?
Xem cái query "Find Duplicate.."
Link file: https://www.mediafire.com/file/0qm7pm0cl...S.zip/file
SELECT TOP 1 tblCTGS.So_Thung FROM tblCTGS WHERE tblCTGS.So_CTGS = [Forms]![sfmPhieuTraCT]![So_CTGS] AND tblCTGS.Nam_CTGS = [Forms]![sfmPhieuTraCT]![Nam_CTGS]
ongke0711 > 13-06-22, 12:23 PM
(10-06-22, 06:40 PM)Đình Phán Đã viết: Tuy nhiên em có 1 bảng tblCTGS chứa tất cả các thông tin cần nhập ở Form Phiếu Mượn
Em muốn khi em nhập So_CTGS, Nam_CTGS tại sub form thì các thông tin So_Thung, So_Tap sẽ truy vấn tại tblCTGS để điền vào sub form.
Đình Phán > 13-06-22, 05:35 PM
(13-06-22, 12:23 PM)ongke0711 Đã viết:(10-06-22, 06:40 PM)Đình Phán Đã viết: Tuy nhiên em có 1 bảng tblCTGS chứa tất cả các thông tin cần nhập ở Form Phiếu Mượn
Em muốn khi em nhập So_CTGS, Nam_CTGS tại sub form thì các thông tin So_Thung, So_Tap sẽ truy vấn tại tblCTGS để điền vào sub form.
Chính xác là bạn muốn xử lý trên Form nào?
Tôi thấy Form Phiếu Mượn chi có 1 form chính chứ đâu có SubForm đâu mà bạn nói là: "nhập [So_CTGS], [Nam_CTGS] tại subform"??
Còn nói về giải pháp "Select TOP 1...." thì cứ làm theo ý của bạn nhưng đã biết dữ liệu nó không chính xác mà vẫn làm à?
Ví dụ: cùng Số CTGS, cùng số Năm -> nó ra 7 dòng (có dòng khác về User), bạn "chọn đại" 1 dòng đầu tiên để nhập liệu thì nó còn gì là tính đúng đắn của dữ liệu.
Muốn chạy thì dùng sự kiện AfterUpdate của cả 2 Textbox nhập liệu đó để chạy lệnh gán dữ liệu.
Đình Phán > 13-06-22, 07:06 PM
(13-06-22, 12:23 PM)ongke0711 Đã viết:(10-06-22, 06:40 PM)Đình Phán Đã viết: Tuy nhiên em có 1 bảng tblCTGS chứa tất cả các thông tin cần nhập ở Form Phiếu Mượn
Em muốn khi em nhập So_CTGS, Nam_CTGS tại sub form thì các thông tin So_Thung, So_Tap sẽ truy vấn tại tblCTGS để điền vào sub form.
Chính xác là bạn muốn xử lý trên Form nào?
Tôi thấy Form Phiếu Mượn chi có 1 form chính chứ đâu có SubForm đâu mà bạn nói là: "nhập [So_CTGS], [Nam_CTGS] tại subform"??
Còn nói về giải pháp "Select TOP 1...." thì cứ làm theo ý của bạn nhưng đã biết dữ liệu nó không chính xác mà vẫn làm à?
Ví dụ: cùng Số CTGS, cùng số Năm -> nó ra 7 dòng (có dòng khác về User), bạn "chọn đại" 1 dòng đầu tiên để nhập liệu thì nó còn gì là tính đúng đắn của dữ liệu.
Muốn chạy thì dùng sự kiện AfterUpdate của cả 2 Textbox nhập liệu đó để chạy lệnh gán dữ liệu.
Private Sub So_CTGS_AfterUpdate()
Dim mySQL As String
Dim myDB As Database
Dim myRs As DAO.Recordset
mySQL = "SELECT top 1 tblCTGS.So_Thung, tblCTGS.So_Tap, tblCTGS.Gia_De, tblCTGS.Kho FROM tblCTGS WHERE tblCTGS.So_CTGS = " & Forms![sfmMuonDetail]![So_CTGS].Value & " AND tblCTGS.Nam_CTGS = " & Forms![sfmMuonDetail]![Nam_CTGS].Value & ";"
Set myDB = CurrentDb
Set myRs = myDB.OpenRecordset(mySQL)
Me.So_Thung.Value = myRs!So_Thung
Me.So_Tap.Value = myRs!So_Tap
Me.Gia_De.Value = myRs!Gia_De
Me.Kho.Value = myRs!Kho
Set myRs = Nothing
Set myDB = Nothing
End Sub