如何限制访问中的字符数超过255?例如,我想要备忘录或文本框将其限制为最多300个字符。
在Access 2010中
答案 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)