Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa
#1
Chào mọi người, cho mình hỏi mình muốn khai báo 1 trường chỉ nhận giá trị là 3 chữ cái in hoa thì phải khai báo như thế nào? mọi người giúp mình với
Chữ ký của dtcomsystem Xin chào, mình là dtcomsystem, Tham gia http://thuthuataccess.com/forum từ ngày 07-12 -13.
Reply
Những người đã cảm ơn
#2
Mở bảng chế độ Design và tạo một trường (Field) kiểu Text với các thuộc tính như sau:
-Phương án (pa) 1:
1-Field Side: 3
2-Validation rule: StrComp(UCase(<Field name>),<Field name>,0)=0
Với Field name là tên trường
3-Validation Text: Vui lòng nhập chữ in hoa

-Phương án 2:
Tuy nhiên pa1 gây phiền cho người dùng, Để linh hoạt hơn, bạn bỏ qua bước 2 và 3 ở pa1, sau đó tại Text Box (VD Text0) trên form có nguồn là trường cần nhập in hoa bạn viết thủ tục cho sự kiện After Update như sau:
Mã:
Text0 = UCase([Text0])

Còn một số cách khác như dùng input mask hoặc dùng sự kiện On KeyPress nhưng cũng bất tiện nên mình không bàn tới
Chữ ký của MTNQ 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
#3
(27-03-14, 09:45 AM)dtcomsystem Đã viết: Chào mọi người, cho mình hỏi mình muốn khai báo 1 trường chỉ nhận giá trị là 3 chữ cái in hoa thì phải khai báo như thế nào? mọi người giúp mình với

Đơn giản bạn chỉ cần thiết lập 02 thuộc tính trong khi thiết kế table
1. field size : 3
2. Format : >
Chữ ký của vulhu06 Xin chào, mình là vulhu06, Tham gia http://thuthuataccess.com/forum từ ngày 15-06 -12.
Reply
Những người đã cảm ơn
#4
(27-03-14, 12:03 PM)vulhu06 Đã viết: Đơn giản bạn chỉ cần thiết lập 02 thuộc tính trong khi thiết kế table
1. field size : 3
2. Format : >

Bạn vulhu06 nhầm ở chỗ này nhé
Format : > chỉ là display format, tức là quy định những gì được hiển thị lên màn hình (trong trường hợp này là chữ in hoa), thực chất dữ liệu không hề được chuyển thành chữ in hoa

cái display format này rất nguy hiểm bởi vì dễ gây nhầm lẫn, nhất là với các dữ liệu dùng cho tính toán, thống kê như các trường kiểu số, kiểu ngày tháng vì dữ liệu hiển thị lên màn hình có thể không đúng với giá trị thực của nó
Chữ ký của MTNQ 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
#5
(27-03-14, 09:45 AM)dtcomsystem Đã viết: Chào mọi người, cho mình hỏi mình muốn khai báo 1 trường chỉ nhận giá trị là 3 chữ cái in hoa thì phải khai báo như thế nào? mọi người giúp mình với

Trả lời:

File size: 3 (tối đa 3 ký tự)
Format: > (chuyển sang chữ hoa)
Input mask: LLL (Chữ cái bắt buộc nhập)
Chữ ký của HungSoft Xin chào, mình là HungSoft, Tham gia http://thuthuataccess.com/forum từ ngày 27-02 -14.
Reply
Những người đã cảm ơn Noname
#6
Không biết các bạn nghĩ sao chứ mình thì không bao giờ sử dụng thuộc thính format trong table vì lý do đã nêu trên

VD:Với Format: >, sau khi bạn nhập chữ thường vào rồi Enter hay bấm chuột sang nơi khác sẽ thấy hiển thị in hoa, nhưng khi bấm chuột vào ô vừa nhập thì lập tức sẽ thấy chuỗi vừa nhập là chữ thường và đây mới thực sự là giá trị của nó.( Khi tạo một text box trên form lấy nguồn là trường vừa nhập bạn cũng sẽ thấy hiển thị chữ thường)

-Mình cũng không dùng Input mask như bạn HungSoft đã nêu ra vì khi người dùng nhập không đúng sẽ nhận được một câu thông báo mặc định của Access bằng tiếng Anh , ta không thay bằng câu Tiếng Việt được và người dùng bình thường có khi không hiểu câu thông báo đó nói cái gì liên quan đến LLL

Mặt khác cái Input mask đặt trong table không có giá trị khi nhập dữ liệu trên form

Nếu bắt buộc nhập đúng 3 ký tự (không ít hay nhiều hơn) mình sẽ đặt thộc tính Validation rule là: StrComp(UCase([text1]),[text1],0)=0 And Len([Text1])=3

Mình có làm một ví dụ. Trên form1:
Text1 là cách 1 của mình
Text2 là cách của bạn HungSoft
Text3 là cách 2 của mình

Các bạn xem thử nhé: Download
Chữ ký của MTNQ 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
#7
Xin lỗi các bạn, mình đính chính lại một chút như sau:

Nếu bắt buộc nhập đúng 3 chữ cái in hoa (không ít hay nhiều hơn) mình sẽ đặt thộc tính Validation rule là:
Mã:
StrComp(UCase([text1]),[text1],0)=0 And Len([Text1])=3 And Not Like "*[!a-z]*"

-Code trên nếu đặt trong table thì Text1 là tên trường, còn trên form thì Text1 là tên điều khiển (thường là text box)
Các bạn có thể xem trong bản Demo mình đã làm

(Mình sửa ký tự thành chữ cái cho chính xác với câu hỏi và thêm dk: And Not Like "*[!a-z]*" để ràng buộc các ký tự nhập vào phải nằm trong phạm vi từ A-Z)

Các bạn có thể tham khảo thêm tại các link sau:
http://support.microsoft.com/KB/100469

http://office.microsoft.com/en-us/access...85532.aspx

Hàm StrComp:
http://office.microsoft.com/en-001/acces...28914.aspx
Chữ ký của MTNQ 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
#8
(27-03-14, 12:27 PM)MatTroiNguQuen Đã viết:
(27-03-14, 12:03 PM)vulhu06 Đã viết: Đơn giản bạn chỉ cần thiết lập 02 thuộc tính trong khi thiết kế table
1. field size : 3
2. Format : >

Bạn vulhu06 nhầm ở chỗ này nhé
Format : > chỉ là display format, tức là quy định những gì được hiển thị lên màn hình (trong trường hợp này là chữ in hoa), thực chất dữ liệu không hề được chuyển thành chữ in hoa

cái display format này rất nguy hiểm bởi vì dễ gây nhầm lẫn, nhất là với các dữ liệu dùng cho tính toán, thống kê như các trường kiểu số, kiểu ngày tháng vì dữ liệu hiển thị lên màn hình có thể không đúng với giá trị thực của nó

cám ơn bạn đã chia sẻ, thêm 01 kinh nghiệm nữa. Nhân tiện mình hỏi chút, như bạn nói thì chỉ cần bắt sự kiện after update của text box với công thức là Ucase thôi, vậy hàm strcomp() có công dụng gì vậy? tại sao so sánh với 0?
Chữ ký của vulhu06 Xin chào, mình là vulhu06, Tham gia http://thuthuataccess.com/forum từ ngày 15-06 -12.
Reply
Những người đã cảm ơn MTNQ
#9
1-Trước tiên mình xin giải thích sơ lược về hàm strcomp()
Hàm strcomp() dùng để so sánh hai chuỗi ký tự
-Cú pháp:
StrComp(string1, string2 [, compare ] )
-Mô tả:
string1, string2: là hai chuỗi dùng để so sánh
compare: Qui định kiểu so sánh

-Hàm StrComp sẽ so sánh và trả vể giá trị như sau:
string1 < string2 trả vể -1
string1 = string2 trả vể 0
string1 > string2 trả vể 1

2-Giải thích: StrComp(UCase([text1]),[text1],0)=0

-Hàm UCase dùng để chuyển đổi chữ cái thường thành chữ cái in hoa, Còn chữ in hoa và các ký tự khác được giữ nguyên
-Trong câu lệnh trên thì compare = 0 tức là so sánh theo hệ nhị phân
Trong bảng mã ASCII thì chữ in hoa có giá trị nhỏ hơn chữ thường

=> kết quả :
-Nêu nhập chữ thường thì sau khi chuyển thành inh hoa sẽ có giá trị nhỏ hơn và hàm trả về -1
-Nếu nhập chữ in hoa hay các ký tự khác thì giá trị của chuỗi được giữ nguên, hàm trả về 0

như vậy chỉ khi nào hàm trả về 0 chuỗi bạn nhập vào mới được chấp nhận

3-bắt sự kiện after update của text box với công thức là Ucase

khi dùng hàm Ucase ở sự kiện after update của text box thì bất kể người dùng nhập vào là chữ thường hay in hoa đều được chuyển đổi thành in hoa khi lưu vào bảng, như vậy ta không cần bắt buộc người dùng phải nhập in hoa nên mình nghĩ đây là cách tối ưu

4-Về điều kiện bắt buộc nhập đúng 3 ký tự và các ký tự phải là chữ cái thì ta đặt DK vào Validation rule (trong bảng hoặc trong thuộc tính của text box ) là:
(Len([Text3])=3 And Not Like "*[!a-z]*") Or Is Null

-Len([Text3])=3 : chiều dài của chuỗi nhập vào phải = 3
-And Not Like "*[!a-z]*" : Ràng buộc các ký tự nhập vào phải nằm trong phạm vi từ A-Z
- Or Is Null là cho phép được bỏ trống

Còn một số vấn đề cần bàn ở đây nhưng mình bận rùi.
P/S: Mình vốn không thích tranh luận nhưng với thiện thiện chí xây dựng, mình mong các bạn cùng tham gia trao đổi 015
Chữ ký của MTNQ 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
#10
Bạn có thể dùng sự kiện keypress để chuyển ký tự khi gõ vào sang chữ hoa:
Dim strcharacter As String
strcharacter = Chr(KeyAscii)
KeyAscii = Asc(UCase(strcharacter))
Trong sự kiện này khi bạn gõ bàn phím ở chế độ chữ thường nhưng vẫn ra chữ hoa, tuy nhiên nhược điểm của nó sẽ là một ký tự đặc biệt, như chữ ư, ơ chẳng hạn sẽ không chuyển được mà bị báo lỗi. Nếu bạn chỉ dùng để nhập một mã số không chứa ký tự đặc biệt thì vẫn có thể áp dụng được.
Trường hợp khác bạn có thể dùng sự kiện exit để chuyển tất cả sang chữ hoa:
maso = Ucase(maso)
Theo cách này khi bạn nhập vào vẫn là chữ thường nhưng khi focus di chuyển khỏi field thì dữ liệu bạn nhập sẽ chuyển sang chữ hoa.
Chữ ký của trunghieu <<---Trên bước đường thành công, không có dấu chân của kẻ lười biếng --->>
ღღღღღTài sản của trunghieu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Mở form có điều kiện. Các bác giúp em với! cannguyen 3 195 23-02-17, 09:46 AM
Bài mới nhất: dutuan80637
  [Hỏi] Làm sao để ấn định Null cho trường Date khi sử dụng Class Module Minh Tiên 8 716 18-11-16, 09:29 AM
Bài mới nhất: MinhnHang
  [Help] Chỉnh giúp Form thống kê hoanghai902 2 189 28-10-16, 06:15 PM
Bài mới nhất: hoanghai902
  Xin giúp tạo 1 trường trong table đánh số tự động thay cho autonumber trungminh 7 531 16-09-16, 05:17 PM
Bài mới nhất: maidinhdan
  Giúp đỡ về form với trungminh 9 575 10-09-16, 09:17 PM
Bài mới nhất: trungminh

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ơ