Access表单技术问询:如何显示双国籍球员的两个国家旗帜
嘿,这个问题其实很好解决——你只需要把Countries表和Players表再关联一次,专门对应第二个国籍字段就行。下面是具体的操作步骤:
方法一:使用关联查询作为表单记录源(推荐)
这种方法最稳定,尤其适合数据量较大的情况:
创建包含双国籍关联的查询
打开Access的查询设计视图,添加Players表和Countries表两次(第二次添加时,Access会自动给它起别名Countries_1,你可以改成Countries2更直观)。- 第一次关联:把
Players的nationality 1字段和Countries(别名Countries1)的Country字段连接起来 - 第二次关联:把
Players的nationality 2字段和Countries(别名Countries2)的Country字段连接起来
然后在查询中选择需要的字段:比如
Players.name、Players.[nationality 1]、Players.[nationality 2],再分别选中Countries1.flag和Countries2.flag,可以给它们重命名为Flag1和Flag2方便后续使用。最终的SQL语句大概是这样的:
SELECT Players.name, Players.[nationality 1], Players.[nationality 2], Countries1.flag AS Flag1, Countries2.flag AS Flag2 FROM (Players LEFT JOIN Countries AS Countries1 ON Players.[nationality 1] = Countries1.Country) LEFT JOIN Countries AS Countries2 ON Players.[nationality 2] = Countries2.Country;保存这个查询,比如命名为
PlayersWithDualFlags。- 第一次关联:把
修改表单的记录源
打开你的球员表单,在设计视图中找到表单的“记录源”属性,把原来的Players表替换成刚才创建的PlayersWithDualFlags查询。添加第二个国旗控件
- 如果你已经有显示第一个国旗的控件,确认它的“控件来源”是查询里的
Flag1 - 添加一个新的图像控件,设置它的“控件来源”为查询里的
Flag2,并调整好位置和大小。
这样当你切换球员记录时,两个国旗会自动对应显示啦,如果某个球员没有第二个国籍,第二个控件会显示空白,这是正常的。
- 如果你已经有显示第一个国旗的控件,确认它的“控件来源”是查询里的
方法二:使用DLookup函数(快速临时方案)
如果不想修改记录源,也可以直接在表单里用DLookup函数来获取第二个国旗:
在设计视图中添加一个图像控件,把它的“控件来源”设置为:
=DLookup("flag", "Countries", "Country='" & Nz([nationality 2], "") & "'")
不过要注意:如果你的nationality 2字段里包含单引号,这个公式会出错;而且当数据量很大时,DLookup的性能会比关联查询差一些,所以更推荐第一种方法。
内容的提问来源于stack exchange,提问作者Tom Lievens

