如何用查询/VBA填充RPG表中空缺的SID与ORG字段?
解决Access中空缺字段的关联填充问题
一、使用更新查询(批量填充首选)
这是最高效的批量处理方式,对应Excel中VLOOKUP的批量替换逻辑,直接通过关联两张表更新空缺值。
直接执行SQL更新
复制以下SQL语句到Access的SQL视图中,执行即可完成填充:
UPDATE RPG INNER JOIN SITELIST ON RPG.HID = SITELIST.SID SET RPG.SID = IIf(IsNull(RPG.SID), SITELIST.[Radar ID], RPG.SID), RPG.ORG = IIf(IsNull(RPG.ORG), SITELIST.[ORG CODE], RPG.ORG) WHERE IsNull(RPG.SID) OR IsNull(RPG.ORG);
可视化操作步骤(适合不熟悉SQL的情况)
- 点击创建选项卡 → 查询设计,添加
RPG和SITELIST两张表 - 拖拽
RPG.HID到SITELIST.SID,建立两表的关联关系 - 切换到更新查询类型(设计选项卡→更新)
- 分别添加
RPG.SID和RPG.ORG字段:- 对于
RPG.SID:- 更新到:
IIf(IsNull(RPG.SID), SITELIST.[Radar ID], RPG.SID) - 条件:
IsNull(RPG.SID)
- 更新到:
- 对于
RPG.ORG:- 更新到:
IIf(IsNull(RPG.ORG), SITELIST.[ORG CODE], RPG.ORG) - 条件:
IsNull(RPG.ORG)
- 更新到:
- 对于
- 先切换回选择查询预览要更新的记录,确认无误后再执行更新。
注意:执行前务必备份
RPG表,避免数据丢失。
二、使用DLOOKUP函数(表单/单条记录场景)
如果需要在表单中实时填充,或者仅查询填充结果不修改原表,可以用DLOOKUP函数:
表单控件实时填充
在表单的SID控件控件来源中输入:
=IIf(IsNull([SID]), DLookup("[Radar ID]", "SITELIST", "[SID] = " & [HID]), [SID])
若
HID是文本类型,需添加单引号:"[SID] = '" & [HID] & "'"
ORG控件同理:
=IIf(IsNull([ORG]), DLookup("[ORG CODE]", "SITELIST", "[SID] = " & [HID]), [ORG])
查询中生成填充结果(不修改原表)
SELECT RPG.HID, IIf(IsNull(RPG.SID), DLookup("[Radar ID]", "SITELIST", "[SID] = " & RPG.HID), RPG.SID) AS Filled_SID, RPG.Equip, RPG.[MOD NOTE NUM], RPG.[Date Complete], RPG.OSFSITE, IIf(IsNull(RPG.ORG), DLookup("[ORG CODE]", "SITELIST", "[SID] = " & RPG.HID), RPG.ORG) AS Filled_ORG FROM RPG WHERE IsNull(RPG.SID) OR IsNull(RPG.ORG);
三、关于DLOOKUPPLUS
如果你的环境中有DLOOKUPPLUS(第三方扩展或自定义函数),用法和DLOOKUP逻辑一致,仅替换函数名即可:
=IIf(IsNull([SID]), DLookupPlus("[Radar ID]", "SITELIST", "[SID] = " & [HID]), [SID])
具体语法参考该函数的说明文档。
排查要点
- 确认
RPG.HID与SITELIST.SID的数据类型完全一致(数字/文本匹配),否则关联会失效 - 检查
SITELIST表中是否存在对应HID的记录,无匹配项则无法填充 - 更新前确保
RPG表未被其他用户锁定
内容的提问来源于stack exchange,提问作者Joe Beck
相关产品推荐
相关产品推荐

