Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Nhuộm đen record mới được thêm vào
#11
(20-02-16, 10:39 AM)jason Đã viết: Chào các ace ở diễn đàn !
năm mới chúc mọi người thật nhiều sức khỏe và vạn sự như ý

Em có một vấn đề muốn hỏi. Như vầy:
khi em thêm mới 1 record từ form vào table .em muốn khi save lại record đó sẽ được chọn (hoặc được nhuộm đen) trong sub form. 
ACE nào biết xin giúp em với ạ

chân thành cảm ơn.

Chưa xem file của bạn nhưng thấy yêu cầu cũng khá đơn giản. Có nhiều cách thực hiện. Bạn có thể thêm lệnh sau vào thủ tục của nút lưu :

Mã:
Me.subform.Form.Recordset.FindFirst "Makhachhang = '" & Me.txtMakhachhang & "'"

Thay subform bằng tên của điều khiển chứa subform của bạn(Nó thường trùng với tên subform),  Makhachhang là tên trường có trong subform, Me.txtMakhachhang là textbox trên mainform có nguồn là  Makhachhang
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 jason
#12
Tiện đây chia sẻ cùng các bác một hàm về FormatConditions:

Mã:
Function AddFormatConditions(frm As Form, strExpression As String, _
       Optional lngBackColor As Long = vbRed, Optional lngForeColor As Long = vbWhite) As Boolean
   On Error GoTo HandleError
   Dim ctl As Control
   For Each ctl In frm.Section(acDetail).Controls
       If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
           ctl.FormatConditions.Delete
           ctl.FormatConditions.Add acExpression, , strExpression
           With ctl.FormatConditions(0)
               .BackColor = lngBackColor
               .ForeColor = lngForeColor
           End With
       End If
   Next ctl
Err_Exit:
   Set ctl = Nothing
   Exit Function
HandleError:
   MsgBox Err.Description, vbCritical, "Err: AddFormatConditions"
   Resume Err_Exit
End Function

Nếu muốn tô màu cho subform theo một hoặc nhiều điều kiện bạn jason có thể tham khảo ví dụ đính kèm và tùy biến nhé: 

Demo FormatConditions.rar
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 nguyenichtri , jason , maidinhdan
#13
(26-02-16, 10:28 AM)MatTroiNguQuen Đã viết:
(20-02-16, 10:39 AM)jason Đã viết: Chào các ace ở diễn đàn !
năm mới chúc mọi người thật nhiều sức khỏe và vạn sự như ý

Em có một vấn đề muốn hỏi. Như vầy:
khi em thêm mới 1 record từ form vào table .em muốn khi save lại record đó sẽ được chọn (hoặc được nhuộm đen) trong sub form. 
ACE nào biết xin giúp em với ạ

chân thành cảm ơn.

Chưa xem file của bạn nhưng thấy yêu cầu cũng khá đơn giản. Có nhiều cách thực hiện. Bạn có thể thêm lệnh sau vào thủ tục của nút lưu :

Mã:
Me.subform.Form.Recordset.FindFirst "Makhachhang = '" & Me.txtMakhachhang & "'"

Thay subform bằng tên của điều khiển chứa subform của bạn(Nó thường trùng với tên subform),  Makhachhang là tên trường có trong subform, Me.txtMakhachhang là textbox trên mainform có nguồn là  Makhachhang

Mã:
 Me.FTERP_sub.Form.Recordset.FindFirst "OrderNumber = '" & Me.txtPO & "'"
em thử cách của anh , thêm code trên vào nút save bài của em nhưng không được. anh xem giúp em với
Chữ ký của jason Học ...học nữa và học mãi 53_53 !

ღღღღღTài sản của jason (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#14
(26-02-16, 11:52 AM)jason Đã viết:
Mã:
 Me.FTERP_sub.Form.Recordset.FindFirst "OrderNumber = '" & Me.txtPO & "'"
em thử cách của anh , thêm code trên vào nút save bài của em nhưng không được. anh xem giúp em với

1/Không nên tìm theo OrderNumber vì dữ liệu có thể trùng. Nên lấy trường có thiết lập index No Duplicates (ví dụ như khóa chính)
2/Form của bạn sau khi Requery thì data trên form chính cũng bị thay đổi do đó bạn phải dùng một biến để lưu giá trị hiện tại trước khi Requery và dùng nó để tìm lại bản ghi vừa được lưu:

Ví dụ:
Mã:
Private Sub cmdSave_Click()
   Dim strSalseInfoID As String
   strSalseInfoID = Me.txtSalseInfoID
   DoCmd.SetWarnings 0
       '...
   DoCmd.SetWarnings -1
   Me.FTERP_sub.Form.Recordset.FindFirst "[SalseInfoID] = '" & strSalseInfoID & "'"
End Sub

-Bạn cũng có thể dùng hàm AddFormatConditions mình đã chia sẻ ở trên:
Mã:
Private Sub cmdSave_Click()
   Dim strSalseInfoID As String
   strSalseInfoID = Me.txtSalseInfoID
   DoCmd.SetWarnings 0
       '...
   DoCmd.SetWarnings -1
   AddFormatConditions Me.FTERP_sub.Form, "[SalseInfoID] = '" & strSalseInfoID & "'"
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 maidinhdan , jason
#15
Hoặc kết hợp cả 2:

Mã:
Private Sub cmdSave_Click()
  Dim strSalseInfoID As String
  strSalseInfoID = Me.txtSalseInfoID
  DoCmd.SetWarnings 0
      '...
  DoCmd.SetWarnings -1
      Me.FTERP_sub.Form.Recordset.FindFirst "[SalseInfoID] = '" & strSalseInfoID & "'"
    AddFormatConditions Me.FTERP_sub.Form, "[SalseInfoID] = '" & strSalseInfoID & "'"

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 jason
#16
em sẽ làm thử 
cảm ơn anh rất nhiều !
Chữ ký của jason Học ...học nữa và học mãi 53_53 !

ღღღღღTài sản của jason (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#17
em đã thử theo anh hướng dẫn và áp dụng bằng cách kết hợp cả 2 ý của anh.
nếu như không tìm kiếm bằng textbox BuyerPONo -> chọn 1 record ngẫu nhiên -> thêm số OrderNumber -> khi save lại thì ok. 
nhưng khi tìm 1 số BuyerPONo -> chọn record tìm được -> thêm số OrderNumber thì không được. (trường hợp anh nói "Form của bạn sau khi Requery thì data trên form chính cũng bị thay đổi do đó bạn phải dùng một biến để lưu giá trị hiện tại trước khi Requery và dùng nó để tìm lại bản ghi vừa được lưu") em chưa biết xử lý thế nào,em bứt tóc gần hết rồi mà chưa giải quyết được  030  . anh trót giúp em phát luôn nha 

cảm ơn anh !
Chữ ký của jason Học ...học nữa và học mãi 53_53 !

ღღღღღTài sản của jason (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#18
(29-02-16, 03:45 PM)jason Đã viết: em đã thử theo anh hướng dẫn và áp dụng bằng cách kết hợp cả 2 ý của anh.
nếu như không tìm kiếm bằng textbox BuyerPONo -> chọn 1 record ngẫu nhiên -> thêm số OrderNumber -> khi save lại thì ok. 
nhưng khi tìm 1 số BuyerPONo -> chọn record tìm được -> thêm số OrderNumber thì không được. (trường hợp anh nói "Form của bạn sau khi Requery thì data trên form chính cũng bị thay đổi do đó bạn phải dùng một biến để lưu giá trị hiện tại trước khi Requery và dùng nó để tìm lại bản ghi vừa được lưu") em chưa biết xử lý thế nào,em bứt tóc gần hết rồi mà chưa giải quyết được  030  . anh trót giúp em phát luôn nha 

cảm ơn anh !

Mình test thấy bình thường mà bạn. Bạn up cái file đã làm lên mình xem thử  016
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
#19
(29-02-16, 05:16 PM)MatTroiNguQuen Đã viết:
(29-02-16, 03:45 PM)jason Đã viết: em đã thử theo anh hướng dẫn và áp dụng bằng cách kết hợp cả 2 ý của anh.
nếu như không tìm kiếm bằng textbox BuyerPONo -> chọn 1 record ngẫu nhiên -> thêm số OrderNumber -> khi save lại thì ok. 
nhưng khi tìm 1 số BuyerPONo -> chọn record tìm được -> thêm số OrderNumber thì không được. (trường hợp anh nói "Form của bạn sau khi Requery thì data trên form chính cũng bị thay đổi do đó bạn phải dùng một biến để lưu giá trị hiện tại trước khi Requery và dùng nó để tìm lại bản ghi vừa được lưu") em chưa biết xử lý thế nào,em bứt tóc gần hết rồi mà chưa giải quyết được  030  . anh trót giúp em phát luôn nha 

cảm ơn anh !

Mình test thấy bình thường mà bạn. Bạn up cái file đã làm lên mình xem thử  016

anh xem file nha : http://www.mediafire.com/download/6c55ym4cc973js1/Demo_20160301.mdb 
Chữ ký của jason Học ...học nữa và học mãi 53_53 !

ღღღღღTài sản của jason (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#20
MTNQ không xem được hết file bạn gởi. Riêng về thủ tục của nút cmdSave mình có vài góp ý như sau:

1/Thường thì khi kiểm tra sự tồn tại của 1 bản ghi ta dùng hàm Dcount:
VD:
Mã:
If (DCount("SalseInfoID", "TPO", "SalseInfoID='" & strSalseInfoID & "'") > 0) Then

2/Bạn dùng IsNull(Me.txtPO) để bắt lỗi điều khiển bị bỏ trống là không đủ mà phải là: 
Mã:
IsNull(Me.txtPO) Or Me.txtPO = ""
 Hai cái này gộp lại thành 
Mã:
Nz(Me.txtPO, "") = ""

3/Không đặt tên các  đối tượng trùng với các từ khóa đặc biệt như Date, time (mình viết câu lệnh INSERT nó báo lỗi, nhìn mãi mới phát hiện ra bạn đặt tên trường là Date)

4/Nên khai báo biến một cách tường minh để tránh các lỗi sau này (đặc biệt với biến đối tượng Recordset). Với biến đối tượng thì sau khi sử dụng phải hủy biến để giải phóng bộ nhớ
VD bạn nên khai báo như sau:
Mã:
' Khai báo tường minh:
Dim DB As DAO.Database
Dim RS As DAO.Recordset
'...các lệnh khác...
' Hủy biến đối tượng:
Set DB = Nothing
Set RS = Nothing

5/Để tránh một số lỗi khi làm việc với Recordset (VD lệnh này sẽ lỗi khi bạn chuyển sang linked table: Set RS = DB.OpenRecordset("TPO", dbOpenTable) - lỗi ở chỗ dbOpenTable) và một số lý do khác.... Ta nên học theo kinh nghiệm của bác paulsteigel chia sẻ trong link sau:
http://thuthuataccess.com/forum/thread-9102.html

6/Sau khi requery thì con trỏ luôn chuyển về dòng đầu tiên nên bạn phải thực hiện lệnh FindFirst để đưa con trỏ về dòng cần tìm sau khi đã requery. Tức là phải đưa lệnh requery lên trên:

Mã:
Private Sub cmdSave_Click()
   Dim strSalseInfoID As String
   strSalseInfoID = Me.txtSalseInfoID
   
   If (DCount("SalseInfoID", "TPO", "SalseInfoID='" & strSalseInfoID & "'") > 0) Then
       MsgBox "Please check Order Number again!", vbOKOnly, "Thong bao"
       Me.txtPO = ""
       Me.txtPO.SetFocus
       Exit Sub
       Else
           If Nz(Me.txtPO, "") = "" Then
               MsgBox "Order Number is null, Please input again !", vbOKOnly
               Me.txtPO.SetFocus
               Exit Sub
           Else
               If DCount("SalseInfoID", "TERP", "SalseInfoID='" & strSalseInfoID & "'") > 0 Then
                   If MsgBox("Do you want save ?", vbYesNo, "Thong Bao") = vbYes Then
                       Dim strSQL As String
                       strSQL = "INSERT INTO TPO (SalseInfoID,OrderNumber,[Date]) VALUES " _
                               & "(" & Me.txtSalseInfoID & "," _
                               & "'" & Me.txtPO & "'," _
                               & Me.txtdate & ")"
                       CurrentDb.Execute strSQL
                       MsgBox "Saved!", vbOKOnly
                       Me.cmdloadDBPO.Enabled = True
                   End If
                   Me.txtBuyerPONo = ""
                   Me.txtPO = ""
                   Me.txtBuyerPONo.SetFocus
                   Me.txtPO.Enabled = False
                   Me.cmdSave.Enabled = False
                   
                   'Lenh nay phai thuc thi truoc:
                   Forms!FPO!FTERP_sub.Requery
                   
                   'Lenh nay chay sau:
                   Me.FTERP_sub.Form.Recordset.FindFirst "[SalseInfoID] = '" & strSalseInfoID & "'"
                   AddFormatConditions Me.FTERP_sub.Form, "[SalseInfoID] = '" & strSalseInfoID & "'"
               End If
           End If
   End If

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 jason , Minh Tiên


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Hightlight field nếu field được modify Anna 2 203 08-09-16, 10:14 AM
Bài mới nhất: ledangvan
  Không nhập liệu được bằng Form ChiMai 8 375 23-07-16, 11:01 PM
Bài mới nhất: hungefi
  Lưu Record honglv157 6 211 15-07-16, 10:56 AM
Bài mới nhất: honglv157
  [Hỏi] Cách hiện các record trong combo box theo điều kiện toancvp 5 334 02-07-16, 12:21 AM
Bài mới nhất: toancvp
  [Help] Không sử dụng lọc combobox trên subform theo điều kiện được? tvn_hut 9 392 04-06-16, 08:17 PM
Bài mới nhất: tvn_hut

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ơ