如何评估访问查询中另一个字段中包含的字段名称?

Posted

技术标签:

【中文标题】如何评估访问查询中另一个字段中包含的字段名称?【英文标题】:How to eval a field name contained in another field in an Access Query? 【发布时间】:2016-07-26 01:22:48 【问题描述】:

我需要创建一个很长的复杂字符串列表,其中包含不同位置的不同字段的数据,以创建解释性报告。 在 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】:

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

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

( 仅用于清楚起见,如果知道要替换的单词不会在字符串中进行比较,则不需要)。在查询中使用此代码,并嵌套尽可能多的 REPLACE 想要使用的不同字段:

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

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

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 可以避免这种情况无聊的部分,如果它工作的话。

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

【讨论】:

以上是关于如何评估访问查询中另一个字段中包含的字段名称?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个字段Oracle SQL中包含的一个字段中查找文本

MySQL 用同一张表中另一个字段的查询结果填充一个新字段

去除站点的数据库字段中包含的关键词,并恢复

将托管类中包含的非托管指针字段传递给非托管代码

访问同一类中另一个对象的私有字段

如何在 Access VBA 中评估字段名称的文本