• Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa
  • Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    dtcomsystem > 27-03-14, 09:45 AM

    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
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    MTNQ > 27-03-14, 10:55 AM

    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
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    vulhu06 > 27-03-14, 12:03 PM

    (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 : >
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    MTNQ > 27-03-14, 12:27 PM

    (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ó
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    HungSoft > 27-03-14, 02:29 PM

    (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)
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    MTNQ > 27-03-14, 08:02 PM

    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
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    MTNQ > 28-03-14, 12:17 AM

    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
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    vulhu06 > 28-03-14, 11:20 AM

    (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?
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    MTNQ > 28-03-14, 01:39 PM

    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
  • RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa

    trunghieu > 28-03-14, 04:43 PM

    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.