如何在MS Access中获取格式化的自动编号值,使其在窗体控件中显示为格式化的值?

时间:2018-08-23 21:31:14

标签: ms-access access-vba

我有一个ID字段,该字段的AutoNumber数据类型具有在字段属性(A-00001,A-00002等)中定义的自定义格式。

我想查找格式值并将其显示在表单文本框控件中。

ServiceNumber_entry = DLookup(“ ServiceID”,“ ServiceRecord”,“ SNID ='”&Forms!ServiceEntry!PartSN_entry&“'”)

使用上面的行,它仅返回数字值,而不返回完整格式的值(即1而不是A-00001)。我想念什么?

1 个答案:

答案 0 :(得分:1)

现有注释都包含很好的信息,但是将它们放在一起可能很有用。注释也无法描述Access自动复制和应用诸如Format之类的属性的上下文,因此注释(即使正确)可能看起来是矛盾的。我的解释有些冗长,但希望避免进一步的混乱。

Format 属性用于Access中任何值的目的是定义数据的显示方式。对于数据表或表单上的文本框控件中显示的表列,情况就是如此。格式定义如何在存储或内存中存储值。相同的值可以设置格式并以不同的方式显示,而不影响基础存储的基准。在这种情况下,“自动编号”值实际上是“长整数”值。 (它们不是以 开头的“ A-”存储,这将要求这些值是字符串,并且会破坏Access自动增加这些值的能力。)

Access试图通过自动将Format属性复制到查询和表单控件来提供一致的数据视图,并减少繁琐的编程细节,就像许多其他元数据属性一样。例如,如果在设计模式下将“自动编号”字段拖到窗体上,它将自动将“格式”字符串从列复制到TextBox控件的“格式”属性。相反,如果在查询中包含同一列,则查询的列属性表也具有Format属性,但是默认情况下它将保持空白。但是,执行查询时,确实会以表列上定义的格式显示查询。此行为并不意味着数据值本身“具有格式”,而是Access只是在自动进行工作,即从表定义中查找默认格式值并将其应用于查询的输出。 (如果存在简单的一对一表列与查询列的关系,这是常见的情况。)

DLookup()是Visual Basic(VBA)函数。此类功能必须独立于元数据(例如格式(或标题,文本对齐方式等))处理“原始”数据。出于编码目的,程序员希望从列中检索实际的长整数值,而不是诸如“ A-00001”之类的格式化字符串值。该功能不仅会跳过格式,还会从数据值中完全删除格式化信息。在编程环境中,可以对数据进行组合和操作,并且“格式”的概念会丢失和/或变得毫无意义。即使在这种情况下看起来似乎很明显,DLookup也不会对您将要处理的数据做任何假设,因此只返回整数值。

如果您的窗体TextBox控件最初并未放在专门用于“自动编号”字段的窗体上,则Access将不会知道该格式属性。它只会将DLookup()中的整数显示为基本整数。但是,您可以手动设置TextBox的Format属性,使其与表列的Format属性完全匹配,以获取期望值。