如何限制访问中的字符超过255

时间:2011-09-27 02:04:37

标签: ms-access

如何限制访问中的字符数超过255?例如,我想要备忘录或文本框将其限制为最多300个字符。

在Access 2010中

3 个答案:

答案 0 :(得分:3)

如果要将表中的备注字段限制为不超过300个字符,请在设计视图中打开该表,并将其添加为字段的验证规则属性。

Len([memo_field])<301

替换memo_field的字段名称。您还可以添加验证文本属性,以在违反规则时显示更加用户友好的消息。如果没有验证文本,该规则将生成此消息......对于用户来说可能不太清楚:

*为'YourTableName.memo_field'设置的验证规则'Len([memo_field])&lt; 301'禁止一个或多个值。输入此字段的表达式可以接受的值。*

您还提到了一个文本框。如果它是绑定到备注字段的文本框,则可以在文本框的“更新前”事件中验证字符长度。如果文本框名为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提供可接受的值,则不允许用户移动到另一个表单字段。

答案 1 :(得分:2)

只是为了解决@ HansUp答案中的一点:

  

Is Null Or Len([memo_field])<301 ...如果您不想允许   Nulls,放弃“Is Null Or”部分。

无需在约束中显式测试空值。约束不必为满足它而评估TRUE。

如果Access数据库引擎(ACE,Jet,等等)实际上有一个规范,它将如下所示:

  

当且仅当指定时,才满足表约束   对于表的任何行,搜索条件都不为假。

根据处理空值所需的三值逻辑,搜索条件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

答案 2 :(得分:1)

将其数据类型更改为备忘录。

max field size of text field

此致