You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi的TDBGrid中显示与ID关联的数据而非ID本身

可以实现,以下是两种常用的实现方案,更推荐使用Lookup字段,无需额外编写业务代码即可完成需求:

方案1:使用Lookup字段(推荐)

Lookup字段是Delphi数据集专门为关联显示外键对应值设计的字段类型,配置完成后自动完成ID到名称的映射:

  1. 首先在窗体/数据模块中新增一个TADOTable组件,关联你的存储测试ID与测试名称的关联表,命名为ADOTable_Test并设置Active为True。
  2. 双击你原来绑定resultas表的TADOTable组件,打开字段编辑器,右键点击「添加所有字段」,先把原表的默认字段全部导入。
  3. 再次右键字段编辑器,选择「新建字段」,按如下配置:
    • 字段名称:自定义,比如TestName
    • 字段类型:选择字符串,长度设置为和测试名称字段的长度一致
    • 字段类型勾选Lookup
    • 下方Lookup属性配置:
      • 密钥字段:选择resultas表中存储测试ID的字段,比如TestID
      • 数据集:选择刚才新增的ADOTable_Test
      • 源字段:选择测试表中对应ID的字段,比如ID
      • 查找字段:选择测试表中存储测试名称的字段,比如TestName
  4. 保存配置后,打开TDBGrid的字段编辑列表,移除原来的测试ID字段,添加刚新建的TestName字段即可,运行后会自动显示对应测试名称。

方案2:使用计算字段

如果你需要更灵活的自定义匹配逻辑,可以选择计算字段方案:

  1. 同样先准备好绑定测试表的TADOTable组件,打开resultas表的字段编辑器,新建字段时类型选择Calculated(计算字段),字段名和类型和方案1保持一致。
  2. 给resultas对应的TADOTable组件添加OnCalcFields事件,代码示例如下:
procedure TForm1.ADOTableResultasCalcFields(DataSet: TDataSet);
begin
  // 按当前记录的测试ID匹配对应名称
  if ADOTable_Test.Locate('ID', DataSet.FieldByName('TestID').AsInteger, []) then
    DataSet.FieldByName('TestName').AsString := ADOTable_Test.FieldByName('TestName').AsString
  else
    DataSet.FieldByName('TestName').AsString := '未知测试';
end;
  1. 同样在TDBGrid中添加计算字段展示即可。

额外优化方案

如果你不需要直接通过TDBGrid编辑resultas表的数据,更建议将TADOTable替换为TADOQuery,直接通过关联SQL查询出测试名称,性能更高,配置更简单,SQL参考:

SELECT r.*, t.TestName
FROM resultas r
LEFT JOIN 测试表名 t ON r.TestID = t.ID

内容的提问来源于stack exchange,提问作者SebasTian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:54:03