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

Ms Access/SQL带条件动态查询问题:下拉列表行值不匹配

解决Access表单多值查询下拉列表按职位ID匹配候选人的问题

问题背景

在Access中创建了用于生成表单的多值查询,其中[Candidat Nom]列是基于Query 1的下拉列表。当前查询能获取候选人选项,但所有行的下拉列表值完全相同:比如职位ID12对应2位候选人,其余职位各对应1位,但所有职位的下拉列表均显示全部候选人,无法按职位ID匹配对应候选人。

最初的Query 1代码:

SELECT T_SALARIE.SALARIE_nom & " " & T_SALARIE.SALARIE_prenom AS Candidat Nom

FROM T_EMPLOI INNER JOIN (T_SALARIE INNER JOIN (T_SALARIE_EMPLOI LEFT JOIN T_STATUT_EMPLOI ON T_SALARIE_EMPLOI.SALARIE_EMPLOI_statut_id = T_STATUT_EMPLOI.STATUT_EMPLOI_id) ON T_SALARIE.SALARIE_NNI = T_SALARIE_EMPLOI.SALARIE_EMPLOI_salarie_nni) ON T_EMPLOI.EMPLOI_identifiant = T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant

WHERE (((T_STATUT_EMPLOI.STATUT_EMPLOI_statut) Like "*valid*" Or (T_STATUT_EMPLOI.STATUT_EMPLOI_statut) Like "*décidé*")  AND ((T_EMPLOI.EMPLOI_entreprise_id)=1));

尝试添加职位ID匹配条件后,执行查询会弹出弹窗要求输入Job ID,无法自动匹配:

SELECT T_SALARIE.SALARIE_nom & " " & T_SALARIE.SALARIE_prenom AS Candidat, T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant

FROM T_EMPLOI INNER JOIN (T_SALARIE INNER JOIN (T_SALARIE_EMPLOI LEFT JOIN T_STATUT_EMPLOI ON T_SALARIE_EMPLOI.SALARIE_EMPLOI_statut_id = T_STATUT_EMPLOI.STATUT_EMPLOI_id) ON T_SALARIE.SALARIE_NNI = T_SALARIE_EMPLOI.SALARIE_EMPLOI_salarie_nni) ON T_EMPLOI.EMPLOI_identifiant = T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant

WHERE (((T_STATUT_EMPLOI.STATUT_EMPLOI_statut) Like "*valid*" Or (T_STATUT_EMPLOI.STATUT_EMPLOI_statut) Like "*décidé*") AND ((T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant)=[R_Select_COMOB]![ACTION_identifiant_emploi]));

解决方案

核心是让下拉列表的数据源动态引用当前表单行的职位ID,而非全局参数或无筛选条件。以下是两种可行方法:

方法1:直接在表单控件的Row Source中写入动态SQL

打开表单设计视图,选中[Candidat Nom]控件,在属性表的Row Source中替换为以下SQL:

SELECT T_SALARIE.SALARIE_nom & " " & T_SALARIE.SALARIE_prenom AS Candidat
FROM T_EMPLOI 
INNER JOIN (T_SALARIE 
INNER JOIN (T_SALARIE_EMPLOI 
LEFT JOIN T_STATUT_EMPLOI ON T_SALARIE_EMPLOI.SALARIE_EMPLOI_statut_id = T_STATUT_EMPLOI.STATUT_EMPLOI_id) 
ON T_SALARIE.SALARIE_NNI = T_SALARIE_EMPLOI.SALARIE_EMPLOI_salarie_nni) 
ON T_EMPLOI.EMPLOI_identifiant = T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant
WHERE (
    (T_STATUT_EMPLOI.STATUT_EMPLOI_statut Like "*valid*" OR T_STATUT_EMPLOI.STATUT_EMPLOI_statut Like "*décidé*")
    AND T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant = Forms!R_Select_COMOB!ACTION_identifiant_emploi
)
  • 这里用Forms!R_Select_COMOB!ACTION_identifiant_emploi明确指定表单控件路径,Access会直接读取当前表单行的职位ID值,不会弹出参数输入框。
  • 确保表单R_Select_COMOB处于打开状态,且ACTION_identifiant_emploi是绑定到当前记录职位ID的控件。

方法2:创建带表单参数的查询

  1. 创建新查询,写入以下SQL:
PARAMETERS [Forms]![R_Select_COMOB]![ACTION_identifiant_emploi] Long; -- 根据职位ID字段类型调整
SELECT T_SALARIE.SALARIE_nom & " " & T_SALARIE.SALARIE_prenom AS Candidat
FROM T_EMPLOI 
INNER JOIN (T_SALARIE 
INNER JOIN (T_SALARIE_EMPLOI 
LEFT JOIN T_STATUT_EMPLOI ON T_SALARIE_EMPLOI.SALARIE_EMPLOI_statut_id = T_STATUT_EMPLOI.STATUT_EMPLOI_id) 
ON T_SALARIE.SALARIE_NNI = T_SALARIE_EMPLOI.SALARIE_EMPLOI_salarie_nni) 
ON T_EMPLOI.EMPLOI_identifiant = T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant
WHERE (
    (T_STATUT_EMPLOI.STATUT_EMPLOI_statut Like "*valid*" OR T_STATUT_EMPLOI.STATUT_EMPLOI_statut Like "*décidé*")
    AND T_SALARIE_EMPLOI.SALARIE_EMPLOI_emploi_identifiant = [Forms]![R_Select_COMOB]![ACTION_identifiant_emploi]
)
  1. 将该查询设置为[Candidat Nom]控件的Row Source。
  • 声明参数后,Access会明确识别这是表单控件的引用,而非需要手动输入的参数。

注意事项

  • 确保表单控件名称与表字段名称无冲突,避免Access混淆参数和字段。
  • 若使用连续表单,下拉列表会自动根据每一行的ACTION_identifiant_emploi值筛选对应的候选人,因为控件引用的是当前记录的字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:36:23