tranthanhan1962 > 29-06-15, 12:18 AM
rainkv > 15-07-15, 07:22 PM
(29-06-15, 12:18 AM)tranthanhan1962 Đã viết: Một form nhập liệu khách hàng tưởng chừng đơn giản, nhưng nếu thiết kế không khoa học sẽ dễ bị phát sinh những lỗi không đáng có: dữ liệu bị trùng lập (một khách hàng có nhiều tên), trong tên sẽ có những khoảng trắng thừa, chữ hoa - chữ thường lột xộn v.v…Mình xem qua demo rồi mà chưa hiểu lắm.
Với form Danh sách khách hàng của mình có thể giải quyết một số vấn đề như thế, mình post lên để các bạn tham khảo.
Những vần đề được giải quyết.
1/ Thông báo vị trí đầu, cuối, record mới.
2/ Cấm nhập khách hàng đã có mã số thuế với tên mới. (vì mã số thuế công ty giống như số CMND).
3/ Xử lý các khoảng trắng thừa.
4/ Chuyển chữ hoa toàn bộ tên khách hàng.
demo
tranthanhan1962 > 15-07-15, 11:18 PM
(15-07-15, 07:22 PM)rainkv Đã viết: Mình xem qua demo rồi mà chưa hiểu lắm.
bạn có thể hướng dẫn chi tiết cho mình cách làm thông báo trùng mả số thuế như vậy để mình làm mã số hs dc ko bạn?
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Response = acDataErrContinue
If DataErr = 3022 Then
MsgBox ("Da bi trung ma hoc sinh.")
Response = 0
End If
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strCriteria As String
Dim intResponse As Integer
strCriteria = DLookup("[MSo]", "DANHSACHHOCSINH", _
"[MSo] = Form![MSo]")
If DCount("*", "DANHSACHHOCSINH", strCriteria) > 0 Then
MsgBox ("Da bi trung ma hoc sinh.")
Me.Undo
End If
End Sub
rainkv > 15-07-15, 11:40 PM
(15-07-15, 11:18 PM)tranthanhan1962 Đã viết:Cám ơn tranthanhan1962 rất nhiều, bạn hướng dẫn như vậy thì quá rõ ràng rồi. Mình nghĩ nên đánh dấu câu trả lời của bạn để ae học acc sau này sẽ cần đến.(15-07-15, 07:22 PM)rainkv Đã viết: Mình xem qua demo rồi mà chưa hiểu lắm.
bạn có thể hướng dẫn chi tiết cho mình cách làm thông báo trùng mả số thuế như vậy để mình làm mã số hs dc ko bạn?
Có nhiều cách để xử lý việc trùng mã số. (Ví vụ field mã số có tên là MSo)
Cách thứ 1
Đặt Mso là khóa chính. Khi Bạn nhập trùng MSo Access sẽ báo lỗi như thế này:
“The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.”
Đây là lỗi 3022
Nếu bạn không muốn acess báo bằng tiếng anh bạn có thể xử lý trong event Form Error
Mã PHP:Private Sub Form_Error(DataErr As Integer, Response As Integer)
Response = acDataErrContinue
If DataErr = 3022 Then
MsgBox ("Da bi trung ma hoc sinh.")
Response = 0
End If
End Sub
Access cho phép bạn nhập trùng khóa chính khi đang nhập dữ liệu trong record, chỉ khi nào bạn chuyển sang record khác hay close form access mới báo lỗi 3022
Cách thứ 2
Trường hợp bạn không muốn đợi access bắt lỗi 3022. Bạn xử lý bằng phương pháp của mình ngay khi nhập mã. Dùng hàm Dlookup tìm MSo trùng với Mso mới đánh vào xử lý ở Event Form BeforeUpdate
Giả sử ta có table tên là DANHSACHHOCSINH, có field Mso không được trùng.
Mã PHP:Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strCriteria As String
Dim intResponse As Integer
strCriteria = DLookup("[MSo]", "DANHSACHHOCSINH", _
"[MSo] = Form![MSo]")
If DCount("*", "DANHSACHHOCSINH", strCriteria) > 0 Then
MsgBox ("Da bi trung ma hoc sinh.")
Me.Undo
End If
End Sub
Khi bạn vừa thoát khỏi textbox Mso lỗi sẽ được báo ngay lập tức đồng thời xóa bỏ ngay Mso mới nhập.
Trường hợp bạn không muốn viết code. Bạn có thể đưa strCriteria vào Validation Rule. Còn thông báo đưa vào Validation Text.
Validation Rule = DLookup("[MSo]"; "DANHSACHHOCSINH"; "[MSo] = Form![MSo]")
Validation Text = Đã bị trùng mã học sinh.
Mấy cái đoạn VietUniMsgBox "Mã s" & ChrW(7889) & " thu" …Chẳng qua là đoạn dịch ra mã VBA ký tự có dấu tiếng Việt để không bị lỗi Font Unicode.
rainkv > 16-07-15, 07:17 AM
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strCriteria As String
Dim intResponse As Integer
strCriteria = DLookup("[MSo]", "DANHSACHHOCSINH", _
"[MSo] = Form![MSo]")
If DCount("*", "DANHSACHHOCSINH", strCriteria) > 0 Then
MsgBox ("Da bi trung ma hoc sinh.")
Me.Undo
End If
End Sub
tranthanhan1962 > 19-07-15, 12:03 AM