如何评估Access Query中另一个字段中包含的字段名称?

时间:2016-04-05 21:43:00

标签: string ms-access ms-access-2010 eval indirection

我需要创建一个复杂字符串的长列表,其中包含不同位置的不同字段的数据以创建解释性报告。 我在Access 2010中构思的唯一方法是将文本部分保存在表中,以及用于组成要显示的字符串的字段名称(请参见图中的line1表达式)。简言之:

//field A contain a string with a field name:
A = "[Quantity]"
//query expression:
=EVAL(A) 
//return error instead the number contained in field [Quantity], present in the query dataset

我想在字段(A)上进行EVAL,以获得字段(B)的值,该字段包含在字段A中。但似乎不起作用。 有什么办法吗?

示例(非常简化): Sample query that EVAL a field containing other field names to obtain the value of the fields

任何想法? PS:对不起我的英语,不是我的母语。

1 个答案:

答案 0 :(得分:1)

我在另一个论坛找到了一个有趣的解决方法。 其他人使用EVAL也有同样的问题,但发现可以使用REPLACE函数替换带字段内容的字符串。

REPLACE("The value of field Quantity is {Quantity}";"{Quantity}";[Quantity])

({}仅用于清晰,如果知道要替换的单词不在字符串中进行比较,则不需要。在查询中使用此代码,并将多个不同的字段嵌套为多个REPLACE:

REPLACE(REPLACE("<Salutation> <Name>";"<Salutation>";[Salutation]);"<Name>";[Name])

可以在字符串中嵌入字段名称,并用查询中该字段的当前值替换它们。当然,后一个例子可以通过连接(&amp;)更简单地完成,但如果字符串包含在字段中而不是硬编码,则可以根据需要链接到记录。

REPLACE(REPLACE([DescriptiveString];"[Salutation]";[Salutation]);"[Name]";[Name])

此外,可以创建基于上下文的复杂字符串:

REPLACE(REPLACE(REPLACE("{Salutation} {Name} {MaidenName}";"{Salutation}";[Salutation]);"{Name}";[Name]);"{MaidenName}";IIF(Isnull([MaidenName]);"";[MaidenName]))

困难的部分是在REPLACE调用中枚举要在字符串中插入的所有字段的占位符(如{Quantity},{Salutation},{Name},{MaidenName}),而使用EVAL则可以避免这种情况无聊的部分,只要它有效。

不像我想的那样整洁,但有效。