【问题标题】:In MS Access VBA, how to get field values when a single field has multiple columns在MS Access VBA中,当单个字段有多个列时如何获取字段值
【发布时间】:2019-08-01 21:01:26
【问题描述】:

我正在使用从其他人那里继承的 MS Access 2016 中的 Access 数据库。其中一个表有一个包含 2 个值的字段 (EthnicID):第一列包含一个数字值,即 ID,第二列包含一个字符串值,其中包含与 ID 号关联的描述。例如:1、“非裔美国人/黑人”; 2、“高加索人”; 3,“西班牙裔/拉丁裔”;等等。这些值来自名为 tbl_Ethnicity 的查找表。

包含 [EthnicID] 字段 (tblClients) 的表在“查找”选项卡的表设计中显示以下字段属性: 显示控制:组合框 行源类型:表/查询 行来源:tbl_Ethnicity 绑定列:1 列数:2 列宽:0";1" “常规”选项卡显示以下字段属性: 字段大小:长整数 格式: 默认值:0

正如您可能期望的那样,当我查看 tblClients 时,EthnicID 字段/列会显示一个字符串值。

但是,我正在编写一些代码来根据从 tblClients 中提取的值以及来自其他各种表的值生成一个新表(我们不要讨论这是否是最好的方法!)。该过程涉及生成一个新的记录集,然后我循环遍历该记录集。在 VBA 中用于生成记录集 (rst) 的 SQL 中,我让它选择“tblClient.EthnicID”并且我希望返回 string 值。但是,rst!EthnicID 始终返回一个数值,而不是字符串值。我也尝试过 rst.Fields(9) 和 rst.Fields(9).Column(1) 和 rst.Fields(9, 1)。要么这些不起作用,要么它们也返回一个数值;将 1 更改为 2 也不会返回字符串(我很确定这些列是从零开始的)。

是否可以让SQL返回表格中显示的表格第二列的字符串值而不是数值?

(我确实意识到我可以在 VBA 中使用 DLookup 或选择语句,但是由于字符串值已经显示在表中,我认为直接获取字符串值而不是查找会更有效再次增加 tbl_Ethnicity 中的字符串值。)

我在网上搜索并没有找到答案,但我可能在搜索中使用了错误的词。

感谢您的任何想法!

【问题讨论】:

    标签: sql vba ms-access


    【解决方案1】:

    只需将另一个JOINtblClients 合并到查找表tbl_Ethnicity 的查询中,即可将相应的字符串值返回给EthnicID。根据需要调整下面的实际列和表名称。这里没有出现多列字段。如果您需要添加更多 JOIN 子句,请使用查询设计器。

    SELECT ..., e.EthnicityStringValue
    FROM tblClients c
    INNER JOIN tbl_Ethnicity e ON c.EthnicID = e.ID
    

    本质上,此 ID 用作从客户表到查找表主键的外键,所有关系数据库的完全合理设置,例如经典的客户-订单关系。

    这些下拉组合框是为了便于阅读,因为我们要求用户在客户表中添加或更新此外键。不是要求用户从无意义的数字列表(1、2、3、...)中选择,字符串值有助于作为有意义的链接:非洲裔美国人/黑人、高加索人、西班牙裔/拉丁美洲人, .... 因此,组合框显示字符串值但隐藏对应的ID但最终将这个隐藏的数字值保存在表格中而不是显示的字符串。

    【讨论】:

    • 是的,我绝对可以做到。似乎已经完成了将数值转换为字符串值的过程,我试图避免再次使用另一个查找或连接来执行此操作。猜猜我不能直接从桌子上拉出绳子,即使桌子在那里显示了绳子。奇怪,但我能做到。只是看起来效率不高。谢谢@Parfait。
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多