ongke0711 > 30-06-20, 07:46 AM
(30-06-20, 07:13 AM)vnt89 Đã viết:Mã PHP:Private Sub MAHD_BeforeUpdate(Cancel As Integer)
If DLookup("MaHD", "HoaDon", "maHD='" & MAHD & "'") Then
MsgBox "Ma Hoa don da trung", vbExclamation
Cancel = True
End If
End Sub
Bạn ongke0711 có thể giả thích dùm mình ý nghĩa của dấu nháy đơn trong điều kiện của hàm Dlookup được không. Mình suy nghĩ hoài mà không hiểu?
tranthanhan1962 > 30-06-20, 10:28 AM
(30-06-20, 07:08 AM)vnt89 Đã viết:OK! Bạn tự học bằng 1 chương trình chính qui. Thì đây là một việc làm nghiêm túc. Đăt điểm cũa các giao trình access nhưng bai đauuf có vẽ đơn giản và dễ hiểu. Nhưng đừng nghĩ nó đơn giản. Những đoạn lý thuyết về khái niệm các đối tượng (object) của access rất quan trọng và cần thiết cho việc lập trình sau này. Nếu có thể bạn tìm giáo trình Micosoft Access (3 quyển) của trường đại học khoa học tự nhiên của Nguyễn Thiện Tâm viết. Đay là giao trinh căn bản và đầy dủ nhất về access mà tôi biết.(26-06-20, 05:50 PM)tranthanhan1962 Đã viết:Bạn có thể hướng dần mình cách thiết lập Validation Rule, Validation Text được không?(26-06-20, 03:18 PM)ongke0711 Đã viết: Đụng nhầm ông thầy rồi.Không có gì quan trọng nhưng để xử lý việc trung khóa chính không chỉ có code (code có vẻ quá hớp với bạn này) có khi xử lý bằng macro hay thiết đặt Validation Rule, Validation Text. Đâu biết thầy đó dạy những gì!
vnt89 > 01-07-20, 12:48 AM
(30-06-20, 07:46 AM)ongke0711 Đã viết:Cảm ơn ongke0711 rất nhiều. Chúc bạn luôn thành công nhé!(30-06-20, 07:13 AM)vnt89 Đã viết:Mã PHP:Private Sub MAHD_BeforeUpdate(Cancel As Integer)
If DLookup("MaHD", "HoaDon", "maHD='" & MAHD & "'") Then
MsgBox "Ma Hoa don da trung", vbExclamation
Cancel = True
End If
End Sub
Bạn ongke0711 có thể giả thích dùm mình ý nghĩa của dấu nháy đơn trong điều kiện của hàm Dlookup được không. Mình suy nghĩ hoài mà không hiểu?
Trong code VBA, khi bạn truyền tham số lấy từ Form, từ biến cho câu lệnh xử lý thì phải tuỳ theo kiểu dữ liệu (Date Type) của tham số đó mà dùng dấu phù hợp.
- Dạng TEXT: phải bao nó bằng cặp dấu nháy đơn '...'. Nếu dùng Query thì dùng dấu nháy kép "..."
[HoTen] = 'Nguyen Van A'
[SoHD] = 'HD001'
- Dạng DATE: bao bằng cặp dấu thăng #...#
[NgayHD] Between #01/01/2010# AND #31/01/2020#
- Dạng NUMBER: không cần dùng dấu nào cả
[MaPhongBan] = 8
vnt89 > 01-07-20, 12:56 AM
(30-06-20, 10:28 AM)tranthanhan1962 Đã viết:Cám ơn tranthanhan1962 nhiều lắm. Nhờ bạn mà mình đã có thêm kiến thức về Validation Rule và Validation Text(30-06-20, 07:08 AM)vnt89 Đã viết:OK! Bạn tự học bằng 1 chương trình chính qui. Thì đây là một việc làm nghiêm túc. Đăt điểm cũa các giao trình access nhưng bai đauuf có vẽ đơn giản và dễ hiểu. Nhưng đừng nghĩ nó đơn giản. Những đoạn lý thuyết về khái niệm các đối tượng (object) của access rất quan trọng và cần thiết cho việc lập trình sau này. Nếu có thể bạn tìm giáo trình Micosoft Access (3 quyển) của trường đại học khoa học tự nhiên của Nguyễn Thiện Tâm viết. Đay là giao trinh căn bản và đầy dủ nhất về access mà tôi biết.(26-06-20, 05:50 PM)tranthanhan1962 Đã viết:Bạn có thể hướng dần mình cách thiết lập Validation Rule, Validation Text được không?(26-06-20, 03:18 PM)ongke0711 Đã viết: Đụng nhầm ông thầy rồi.Không có gì quan trọng nhưng để xử lý việc trung khóa chính không chỉ có code (code có vẻ quá hớp với bạn này) có khi xử lý bằng macro hay thiết đặt Validation Rule, Validation Text. Đâu biết thầy đó dạy những gì!
Validation Rule: Điều kiện dữ liệu cho 1 field.
Validation Text: Thông báo khi điều kiên gặp lỗi.
Phương pháp nầy chỉ xử dụng cho những trường hợp đơn giản, phức tạp hơn (như báo lỗi trùng khóa chính của ban) thì phải dùng VBA
Ví dụ trên field SOLUONG của table CHITIETHOADON, bạn muốn lúc nào cũng phải có giá trị >0, thì chỉ cần thiết đặt: Validation Rule: >0, Validation Text:Giá trị phải lớn hơn 0
Lúc này khi nhập dữ liệu nếu SOLUONG có giá trị <=0 nó sẽ báo lỗi
Đây là link hướng dẫn cho điều bạn yêu cầu
http://allenbrowne.com/ValidationRule.html
Link gốc bằng tiếng Anh, bạn có thể dùng Google Dịch để tham khảo
vnt89 > 01-07-20, 01:02 AM
Salomon > 05-07-20, 01:24 AM
(26-06-20, 02:21 PM)ongke0711 Đã viết: Cách tổng hợp đúng yêu cầu của bạn là kết hợp cách của anh tranthanhan1962 và cách của AnNguyen.
- Dùng DCount cho sự kiện BeforeUdate nhưng Form cũng sẽ tự động hiện thông báo mặc định của hệ thống sau thông báo của bạn.
- Để tắt thông báo lỗi của hệ thống thì dùng thêm cách của bác Ân nhưng rút gọn lại: khi có báo lỗi thì cứ chạy tiếp (acDataErrContinue)
Mã PHP:Option Explicit
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 3022 Then 'Ma loi trung du lieu'
Response = acDataErrContinue
End If
End Sub
Private Sub MAHD_BeforeUpdate(Cancel As Integer)
If DLookup("MaHD", "HoaDon", "maHD='" & MAHD & "'") Then
MsgBox "Ma Hoa don da trung", vbExclamation
Cancel = True
End If
End Sub
ongke0711 > 05-07-20, 03:34 PM
(05-07-20, 01:24 AM)Salomon Đã viết: Sal thấy hay, đã thử mà vì vẫn không hiểu lắm các tham số của Dlookup nên file demo sau bị lỗi mà không sửa được. Mong các bạn chỉ giáo thêm. Cám ơn
Salomon > 06-07-20, 12:29 AM
(05-07-20, 03:34 PM)ongke0711 Đã viết: Lỗi này cũng do tôi không kiểm tra kỹ code.
Dlookup sẽ trả về một giá trị nào đó nếu tìm thấy hoặc là NULL nên không thoã điều kiện. Không trả về True/False nên đưa vô hàm If như code trên bị báo lỗi.
Phải sửa lại:
If Not IsNull(DLookup("MaHD", "HoaDon", "maHD='" & MAHD & "'")) Then ...
Hoặc dùng DCount()
If DCount("MaHD", "HoaDon", "maHD='" & MAHD & "'") > 0 Then ...
tranthanhan1962 > 06-07-20, 12:51 AM
(05-07-20, 01:24 AM)Salomon Đã viết: Sal thấy hay, đã thử mà vì vẫn không hiểu lắm các tham số của Dlookup nên file demo sau bị lỗi mà không sửa được. Mong các bạn chỉ giáo thêm. Cám ơnDLookup chẳng qua là một hàm tìm kiếm (Giống như Hlookup, Vlookup của Excel), cú pháp DLookup ("Expr", "Domain", "Criteria"). Trong đó Expr: Biểu thức xác định trường muốn trả về giá trị, Domain (miền, lãnh địa): Lãnh địa là tên một table hoặc một query, Criteria: Điêu kiện, tiêu chí. Chính cặp ngoăc kép "" gây khó dễ cho nhưng ai yếu trong việc xử lý biểu thức trong phần điều kiện.
Salomon > 05-08-20, 01:09 AM
(06-07-20, 12:51 AM)tranthanhan1962 Đã viết: DLookup chẳng qua là một hàm tìm kiếm (Giống như Hlookup, Vlookup của Excel), cú pháp DLookup ("Expr", "Domain", "Criteria"). Trong đó Expr: Biểu thức xác định trường muốn trả về giá trị, Domain (miền, lãnh địa): Lãnh địa là tên một table hoặc một query, Criteria: Điêu kiện, tiêu chí. Chính cặp ngoăc kép "" gây khó dễ cho nhưng ai yếu trong việc xử lý biểu thức trong phần điều kiện.
Cách tốt nhất lập biểu thưc cho Criteria là tạo một query có điều kiện tương ứng chuyển query thành SQL sao đó copy mệnh đề WHERE đưa vào
....
Tất nhiên phải nắm rõ các cú pháp:
[Forms]![ChiTietNhap Subform]![Mathuoc] = Forms!ChiTietNhap Subform!Mathuoc = Me!Mathuoc = Mathuoc.Value