【问题标题】:How to trap "The text is too long to be edited" error如何捕获“文本太长无法编辑”错误
【发布时间】:2021-01-11 22:14:59
【问题描述】:

我们有一个绑定到后端 SQL Server 数据库的 Access 表单。当用户输入的文本超出绑定到该表单控件的相应数据列的数据限制时,Access 会显示“文本太长,无法编辑”错误。我认为(但无法验证)这是错误 #2221。

我希望能够捕获此错误以提供对用户更友好的消息。在研究中(发现 thisthis),一些编码人员提到能够在 Form_Error 事件中捕获该错误,我发现了一篇支持文章,其中包含使用 Form_Error 事件捕获错误 here 的一个不错的示例。但这对我不起作用。 Form_Error 事件似乎不会在此错误期间触发,尽管它似乎在先前引用的线程中以这种方式成功捕获错误时触发。线程中有人提到该错误在 Access 2002 之前无法捕获,但自 Access 2002 以来。我有 Access 365!

了解此错误是否实际上是可捕获的,或者我如何在 Form_Error 事件或其他事件中处理此问题?

【问题讨论】:

  • 您的链接几乎总是有用的,但是 Solvusoft 页面是垃圾。只是一些通用的绒毛和他们产品的广告。 @June7
  • 您已经有证据表明该错误是可捕获的。这表明此错误消息有多模糊,并且 Access 不一定是我在该链接中发现的有趣来源。坦率地说,找不到太多。如果我们无法重现以及没有代码可分析,则问题可能会被关闭。
  • 我只记得很久以前处理过这个问题,至少看起来是一样的。我尽量防止错误,而不是尽可能地陷入困境。在 SQL UPDATE 操作编辑记录之前,我使用代码测试 UNBOUND 控件的输入长度。代码在按钮单击事件中。在您的情况下,也许可以使用控件 BeforeUpdate。在提交输入之前验证数据,在输入满足要求之前不要让用户离开控制权。
  • 我也刚刚想到,可以使用 ValidationRule 和 ValidationText 属性。规则如:Len([myControl])<=25 Or Is Null.

标签: vba ms-access


【解决方案1】:

我可以建议的唯一“否则”方法是防止错误而不是陷阱。通常,文本(短文本)类型字段将阻止输入超过允许限制的字符。但是,粘贴文本会失败,并触发引用的错误。

要处理可能超过 255 个字符的粘贴文本,请考虑使用备注(长文本)字段或 UNBOUND 文本框。使用 ValidationRule 和/或 VBA 代码来验证输入 - 在输入满足要求之前不要让用户离开控制权。

我测试了复制/粘贴并触发了控件的 BeforeUpdate 事件。

备注字段或 UNBOUND 控件上的 ValidationRule (如 Len([myControl])=10 Or Is Null)适用于键入或粘贴的输入。

【讨论】:

  • 更新前事件方法是我们首先尝试的方法。这种方法没有奏效。我们都无法在此处捕获此特定错误,也无法在触发错误之前挤入任何代码来处理此问题。似乎在 BeforeUpdate 事件触发之前触发了错误。此外,使用验证不起作用是有原因的。我会再次测试并报告为什么会这样(不记得了)。但我记得验证方法对我们不起作用。
  • 我验证了验证方法不起作用。如果我粘贴很长的文本(这是人们将数据输入此字段的主要方式),则在验证发生之前会触发“文本太长”错误。如果有人在数据中键入(这在我们的用例中几乎不会发生),那么 Access 似乎只是阻止他们键入比列可以接受的更多字符,而没有错误消息。但即使在这种情况下,您也永远不会收到验证消息。
  • 编辑了我的答案。
  • 您是如何测试更新前的?我们试过了,没有检测到错误。
  • 不,它没有检测到错误,因为没有错误。代码不是在寻找错误。它将测试文本框值的长度,如果不可接受,取消更新并告诉用户重新输入。这是数据验证,也正是 BeforeUpdate 事件的用途。
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多