2011-09-27 52 views

回答

3

如果你想在一個表中備註字段限制爲不超過300個字符,在設計視圖中打開表並添加此作爲字段的有效性規則屬性。

Len([memo_field])<301 

將您的字段名替換爲memo_field。違反規則時,您還可以添加驗證文本屬性以顯示更加用戶友好的消息。在沒有驗證文本的情況下,該規則會生成此消息......這可能對用戶來說不是很清楚:

*驗證規則'Len([memo_field])< 301'設置禁止一個或多個值爲'YourTableName.memo_field'。輸入該字段的表達式可以接受的值。*

您還提到了一個文本框。如果它是綁定到備註字段的文本框,則可以驗證文本框的Before Update事件中的字符長度。如果文本框被命名爲txtMemo_field:

Private Sub txtMemo_field_BeforeUpdate(Cancel As Integer) 
    If Len(Me.txtMemo_field) > 300 Then 
     MsgBox "Please limit data to maximum of 300 characters." 
     Cancel = True 
    End If 
End Sub 

消息框後,將光標仍然位於在文本框中,並且用戶將不會被允許移動到另一種形式的字段沒有用於供給一個可接受的值txtMemo_field。

+0

驗證規則即使在允許空值時也需要測試'IS NULL'嗎? – onedaywhen

+0

...我自己回答了這個問題:) – onedaywhen

+0

@onedaywhen是的,你是對的;我不留神。我糾正了答案。謝謝。 – HansUp

1

將其數據類型更改爲備註。

max field size of text field

問候

+0

謝謝,但字段大小限制爲255個字符,但在我的情況下,我想限制爲300個字符。 – Khalid

+0

您可以將其文本數據類型更改爲備忘錄,它可以容納長達64000個字符的文本 – BizApps

2

只是爲了解決@ HansUp的回答一點:

Is Null Or Len([memo_field])<301 ...如果你不希望允許空值 ,刪除「爲空或」部分。

沒有必要明確測試約束中的空值。一個約束不需要評估TRUE就可以滿足。

如果Jet數據庫引擎(ACE,李連杰,等等)竟然出現了規範它會這樣寫:

表約束是滿意的,當且僅當指定的 搜索條件是不是假的表中的任何一行。

據處理空值所需的三值邏輯,搜索條件LEN(NULL) < 301取值爲UNKNOWN和表約束將被滿足(因爲UNKNOWN不是FALSE)。

但是,Access沒有這樣的規範,所以我們必須測試並看到上面的斷言是真的(只需複製並粘貼到任何VBA模塊中,不需要引用,在用戶的臨時文件夾中創建一個空白mdb,然後創建表,驗證規則 - 無需顯式測試null - 然後嘗試添加成功的空值QED):

Sub WhyTestIsNull() 

    On Error Resume Next 
    Kill Environ$("temp") & "\DropMe.mdb" 
    On Error GoTo 0 

    Dim cat 
    Set cat = CreateObject("ADOX.Catalog") 

    With cat 

    .Create _ 
     "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & _ 
     Environ$("temp") & "\DropMe.mdb" 

    With .ActiveConnection 

     Dim Sql As String 

     Sql = _ 
      "CREATE TABLE Test (" & _ 
      " ID INTEGER NOT NULL UNIQUE, " & _ 
      " memo_field MEMO" & _ 
      ");" 
     .Execute Sql 

    End With 

    ' Create Validation Rules 
    Dim jeng 
    Set jeng = CreateObject("JRO.JetEngine") 
    jeng.RefreshCache .ActiveConnection 

    .Tables("Test").Columns("memo_field") _ 
     .Properties("Jet OLEDB:Column Validation Rule").Value = _ 
     "LEN(memo_field) BETWEEN 1 AND 300" 

    jeng.RefreshCache .ActiveConnection 

    Sql = "INSERT INTO Test (ID, memo_field) VALUES (1, NULL);" 
    .ActiveConnection.Execute Sql 

    Sql = "SELECT * FROM Test;" 

    Dim rs 
    Set rs = .ActiveConnection.Execute(Sql) 
    MsgBox rs.GetString(2, , , , "<NULL>") 

    Set .ActiveConnection = Nothing 
    End With 

End Sub 
相關問題