huuduy.duy > 03-11-16, 03:48 PM
cpucloi > 03-11-16, 08:19 PM
ongke0711 > 03-11-16, 09:08 PM
(03-11-16, 08:19 PM)cpucloi Đã viết: Hàm IF là được bạn ơi!
Xong bạn lưu ý: Trường hợp Giới tính là Nữ.
- Có chồng khác (con gái mà )
- Chưa có chồng khác nhé (hết con gái rồi nhé)
huuduy.duy > 03-11-16, 10:39 PM
(03-11-16, 08:19 PM)cpucloi Đã viết: Hàm IF là được bạn ơi!
Xong bạn lưu ý: Trường hợp Giới tính là Nữ.
- Có chồng khác (con gái mà )
- Chưa có chồng khác nhé (hết con gái rồi nhé)
Duyet1: IIf([MaGT]=True;"Mr ";"Ms ") & tachhoten2([tblViecRieng].[ToDuyet];0)
ongke0711 > 03-11-16, 11:18 PM
Public Function TachHoTen3(MaNV As String, Kieu As Byte)[/font]
If IsNull(MaNV) Or MaNV = "" Then
TachHoTen3 = "-"
Exit Function
End If
Dim MrMs As String, Ten As String
If DLookup("MaGT", "tblHoSoCNV", "[MSNV]='" & MaNV & "'") = -1 Then
MrMs = "Mr."
Else
MrMs = "Ms."
End If
Dim bytSpace As Byte
Ten = DLookup("HoTen", "tblHoSoCNV", "[MSNV]='" & MaNV & "'")
bytSpace = InStrRev(Ten, " ", -1)
If bytSpace = 0 Then
TachHoTen3 = MrMs & Ten
Exit Function
End If
If Kieu = 0 Then
TachHoTen3 = MrMs & Right(Ten, Len(Ten) - bytSpace)
Else
TachHoTen3 = MrMs & Left(Ten, bytSpace - 1)
End If
End Function
[font=Tahoma]
huuduy.duy > 04-11-16, 01:01 AM
(03-11-16, 11:18 PM)ongke0711 Đã viết: Nếu bạn dùng công thức có [MaGT] cho field Duyet1 như trên thì trong query của bạn phải có thêm 3 cột [MaGT] cho Duyet1, Duyet2, Duyet3 (mỗi người duyệt một mã giới tính khác nhau). Và để làm cách này bạn phải JOIN với tblHoSoCNV thông qua [HoTên] của Tổ Duyệt, XnDuyet, CtyDuyet chứ không phải Join bằng [MSNV] => Sai về mặt tổ chức CSDL. Bạn cứ làm thử theo cách này của bạn xem sao để thấy được tính khả thi của nó.
Cái table ViecRieng của bạn đã sai khi dùng [HoTen] để lưu trong 3 field [ToDuyet], [XnDuyet], [CtyDuyet] đáng lẻ phải lưu bằng MSNV, khi cần thì mới Join với tblHoSoCNV để lấy thông tin Họ Tên, Giới Tính... phục vụ cho các truy vấn, báo cáo sau này mà dễ thấy nhất là cái query mà bạn đang hỏi. Bạn không thể truy vấn thông qua cái tên dài loằng ngoằn mà nó rất dễ sai nếu cùng 1 cái tên nhưng nếu có dư 1 khoảng trắng hoặc chữ Hoa, chữ thường … là đã là 2 record khác nhau rồi.
Tôi sửa cái Function của bạn một chút và bắt buộc các field [ToDuyet], [XnDuyet], [CtyDuyet] phải lưu bằng [MSNV].
Mã PHP:Public Function TachHoTen3(MaNV As String, Kieu As Byte)[/font]
If IsNull(MaNV) Or MaNV = "" Then
TachHoTen3 = "-"
Exit Function
End If
Dim MrMs As String, Ten As String
If DLookup("MaGT", "tblHoSoCNV", "[MSNV]='" & MaNV & "'") = -1 Then
MrMs = "Mr."
Else
MrMs = "Ms."
End If
Dim bytSpace As Byte
Ten = DLookup("HoTen", "tblHoSoCNV", "[MSNV]='" & MaNV & "'")
bytSpace = InStrRev(Ten, " ", -1)
If bytSpace = 0 Then
TachHoTen3 = MrMs & Ten
Exit Function
End If
If Kieu = 0 Then
TachHoTen3 = MrMs & Right(Ten, Len(Ten) - bytSpace)
Else
TachHoTen3 = MrMs & Left(Ten, bytSpace - 1)
End If
End Function
[font=Tahoma]
- Đưa vào Query: Duyet1: TachHoTen3(Nz([ToDuyet],""),0)
Phải dùng hàm Nz() để tránh báo lỗi khi gặp trường hợp các field ToDuyet, XnDuyet... không có dữ liệu (rỗng)
huuduy.duy > 04-11-16, 03:30 PM
(04-11-16, 01:01 AM)huuduy.duy Đã viết:Nhờ anh xem lại giúp em, trường hợp Họ và tên người duyệt có từ 4 chữ trở lên thì không lấy tên được, chỉ hiện ra Ms, hoặc Mr(03-11-16, 11:18 PM)ongke0711 Đã viết: Nếu bạn dùng công thức có [MaGT] cho field Duyet1 như trên thì trong query của bạn phải có thêm 3 cột [MaGT] cho Duyet1, Duyet2, Duyet3 (mỗi người duyệt một mã giới tính khác nhau). Và để làm cách này bạn phải JOIN với tblHoSoCNV thông qua [HoTên] của Tổ Duyệt, XnDuyet, CtyDuyet chứ không phải Join bằng [MSNV] => Sai về mặt tổ chức CSDL. Bạn cứ làm thử theo cách này của bạn xem sao để thấy được tính khả thi của nó.
Cái table ViecRieng của bạn đã sai khi dùng [HoTen] để lưu trong 3 field [ToDuyet], [XnDuyet], [CtyDuyet] đáng lẻ phải lưu bằng MSNV, khi cần thì mới Join với tblHoSoCNV để lấy thông tin Họ Tên, Giới Tính... phục vụ cho các truy vấn, báo cáo sau này mà dễ thấy nhất là cái query mà bạn đang hỏi. Bạn không thể truy vấn thông qua cái tên dài loằng ngoằn mà nó rất dễ sai nếu cùng 1 cái tên nhưng nếu có dư 1 khoảng trắng hoặc chữ Hoa, chữ thường … là đã là 2 record khác nhau rồi.
Tôi sửa cái Function của bạn một chút và bắt buộc các field [ToDuyet], [XnDuyet], [CtyDuyet] phải lưu bằng [MSNV].
Mã PHP:Public Function TachHoTen3(MaNV As String, Kieu As Byte)[/font]
If IsNull(MaNV) Or MaNV = "" Then
TachHoTen3 = "-"
Exit Function
End If
Dim MrMs As String, Ten As String
If DLookup("MaGT", "tblHoSoCNV", "[MSNV]='" & MaNV & "'") = -1 Then
MrMs = "Mr."
Else
MrMs = "Ms."
End If
Dim bytSpace As Byte
Ten = DLookup("HoTen", "tblHoSoCNV", "[MSNV]='" & MaNV & "'")
bytSpace = InStrRev(Ten, " ", -1)
If bytSpace = 0 Then
TachHoTen3 = MrMs & Ten
Exit Function
End If
If Kieu = 0 Then
TachHoTen3 = MrMs & Right(Ten, Len(Ten) - bytSpace)
Else
TachHoTen3 = MrMs & Left(Ten, bytSpace - 1)
End If
End Function
[font=Tahoma]
- Đưa vào Query: Duyet1: TachHoTen3(Nz([ToDuyet],""),0)
Phải dùng hàm Nz() để tránh báo lỗi khi gặp trường hợp các field ToDuyet, XnDuyet... không có dữ liệu (rỗng)
Cảm ơn anh nhiều
maidinhdan > 04-11-16, 05:41 PM
(04-11-16, 03:30 PM)huuduy.duy Đã viết: Nhờ anh xem lại giúp em, trường hợp Họ và tên người duyệt có từ 4 chữ trở lên thì không lấy tên được, chỉ hiện ra Ms, hoặc Mr
Trân trọng
huuduy.duy > 04-11-16, 05:58 PM
(04-11-16, 05:41 PM)maidinhdan Đã viết:(04-11-16, 03:30 PM)huuduy.duy Đã viết: Nhờ anh xem lại giúp em, trường hợp Họ và tên người duyệt có từ 4 chữ trở lên thì không lấy tên được, chỉ hiện ra Ms, hoặc Mr
Trân trọng
Hàm của Ongke rất ok rồi.
Bạn kiểm tra xem cái tên bạn gõ có thừa khoảng trắng ( phím cách - space) ở cuối tên đó không?
Nếu có thì nó chỉ ra chữ : Mr hoặc Mrs
Thân!