在 ms-access 中处理长文本的最佳实践

Best practice for working with long texts in ms-access

如果有人能解决我的问题,我将不胜感激。 我是使用 Ms Access 的新手,但我仍然在使用它的基本功能方面积累经验。

我有一个 table MyItems。它的 2 个字段是:ItemCode 和 ItemName。 ItemName 是一个很长的文本(备忘录类型)。我还有一个查询和一个包含许多字段的表单。表单的记录源也包含许多字段。所有这些东西(与 1 个字段相关联)具有相同或相似的名称,因此我无法很好地区分它们。

我想要的是当我设置 ItemCode 的值(在名称为 ItemCode 的未绑定组合框或列表框中)时 ItemName 的值显示在控件中 - 也许是 TextBox。

我可以在 ListBox 中显示它的值(通过 sql 在其行源中查询),我对此没有问题,我在管理事件方面没有问题,但是文本很长并且是切。我知道不幸的是 ListBoxes 没有多行 属性。因此,也许最适合处理的控件是 TextBox。也许最合适的显示值的方法是在 TextBox 的控件源中使用 DLookUp 函数。但是在这个名称相似或相同的项目的海洋中,我无法处理它的语法,我反复尝试了很长时间。所以我有两个问题:

  1. 控件源中的 TextBox 控件和 DLookUp 函数是否是从 table 中提取长文本而不绑定的最佳方式,或者有更多的 suitable 控件(哪个直接使用 sql 查询)?

  2. DLookUp 的正确语法是什么? - 到底哪里有' '、" "、[ ]、.Value、=、&,我必须在哪里写 table 或表单的路径以及哪里会出错?如果我只写 [ItemCode],它将与什么相关联 - 表单记录源、table、表单控件或其他什么?如果有人为我的案例编写了正确的语法,或者如果他与大量使用 DLookUp 的示例共享 link,我将不胜感激。我发现的那些并不令我满意。

  1. 绑定控件或未绑定控件。如果未绑定,则需要在控件源中使用 VBA 代码或 DLookup 加载文本。没有其他选择。
    就个人而言,我宁愿使用 ItemCodeAfterUpdate 事件,并在那里调用 DLookup,但这是一个偏好问题。

  2. 2.

没那么复杂。您基本上在 3 个参数中包含 SQL 查询的 SELECT、FROM、WHERE 部分。 [] 所有包含空格或其他特殊字符的标识符以及引用表单控件时都需要。

=DLookup("ItemName", "[my Table]", "ItemCode = '" & [ItemCode] & "'")

如果 ItemCode 是文本而不是数字,则需要单引号 ''

您也可以使用双重(转义)双引号,但那样可读性要差得多。

=DLookup("ItemName", "[my Table]", "ItemCode = """ & [ItemCode] & """")

现在 [ItemCode] 来自哪里?

  • Access 首先在表单上查找名称为 ItemCodecontrol
  • 如果没有,它会在表单的 RecordSource 中查找字段 ItemCode

这些是 [ItemCode] 可以评估的唯一方法。为避免混淆,建议使用与其源字段相同的名称命名绑定控件。

上面的语法只有在所有内容都在同一表单上时才有效。如果 [ItemCode] 处于不同的形式,或者您从查询中引用它,则使用

=DLookup("ItemName", "[my Table]", "ItemCode = '" & Forms![my Form]![ItemCode] & "'")

有关子表单的更复杂情况,请参阅 Refer to Form and Subform properties and controls

并在 VBA 中使用它(在 ItemCode_AfterUpdate 中):

Me!ItemName = DLookup("ItemName", "[my Table]", "ItemCode = '" & Me![ItemCode] & "'")