级联组合框中的条件表达式错误中的数据类型不匹配

Data type mismatch in criteria expression error in cascading combobox

每次在我的数据库中设置的表单上,我都会收到一个 "data type mismatch in criteria expression" 错误,其中包含来自两个不同 table 的级联组合框:tblUnitstblProjects。第一个组合框 (cboUnit) 从 tblUnits 中选择适当的 UnitID,而第二个 (cboProject) 将 ProjectID 的选项限制为所选的 UnitID。

cboUnit 的行源:

SELECT [tblUnits].ID, [tblUnits].Unit FROM tblUnits ORDER BY [Unit];

下面是 AfterUpdate 的代码:

Private Sub cboUnit_AfterUpdate()
     On Error Resume Next
     cboProject.RowSource = "Select tblProjects.ID " & _
                          "FROM tblProjects " & _ 
                          "WHERE tblProjects.UnitID = '" & cboUnit.Value & _ 
                          "ORDER BY tblProjects.ID;" 

目标 table 中的 ProjectID 和 UnitID 字段是数字,但不是查找字段,并且绑定的列是正确的。我不明白为什么即使在严格处理外键时我仍然会遇到条件不匹配的问题。

您似乎在删除 cboUnit 值的地方有一个孤立的单引号。假设两个字段都是自动编号(或长整数),只需删除单引号:

Private Sub cboUnit_AfterUpdate()
 On Error Resume Next
 cboProject.RowSource = "Select tblProjects.ID " & _
                      "FROM tblProjects " & _ 
                      "WHERE tblProjects.UnitID = " & cboUnit.Value & _ 
                      " ORDER BY tblProjects.ID;"

Christopher 解释了如何解决代码构建的 SELECT 语句中的错误。

但是,我不认为每次用户在 cboUnit 中选择一个值时都需要修改 cboProject.RowSource

cboProject.RowSource用这个应该更简单,以后不要改了:

SELECT p.ID FROM tblProjects AS p
WHERE p.UnitID = [Forms]![YourFormNameHere]![cboUnit]
ORDER BY p.ID;

那么您需要为 cboUnit 更新 后重新查询 cboProject:

Private Sub cboUnit_AfterUpdate()
    Me!cboProject.Requery