【发布时间】:2015-04-13 04:00:05
【问题描述】:
我有一个数据库,其中包含以下字段:Employee_Manager 和 Manager_Department,位于名为Employees 的表中。我还有一个名为 Managers 的表中的经理及其相应部门的主列表,其中包含名为 Manager_ID 和 Department 的字段。我正在编写一个 VBA 脚本,该脚本将验证员工表中列出的员工经理是否有效 - 存在于经理的主列表中。我正在使用的 VBA 代码如下:
Public sub validateManagers(manager as string, managerDepartment as String)
dim db As DAO.database
dim rs As DAO.recordset
dim sqlString as String
set db = currentDb
sqlString = "SELECT [Manager_ID] FROM [Managers] WHERE [Manager_ID] LIKE ""*" & manager & "*"" And [Department] LIKE ""*" & managerDepartment & "*"""
set rs = db.OpenRecordset(sqlString)
if Not rs.EOF Then
If (Instr(1, rs.Fields(0), manager, vbTextCompare)) <> 0 Then
validateManagers = "Valid Manager"
Else
validateManagers = manager & "Is not a valid manager in" & managerDepartment
End if
Else
validateManager = "No matching roles found"
End if
现在代码只是部分工作。当雇员表中的所有经理都在经理表中找到时,我没有问题。但是,当员工表中列出的经理与经理表中为该经理指定的角色不匹配时,代码会失败。 内部 if 语句中的 else 子句没有像我预期的那样运行。 函数返回外部 if 语句的外部 else 子句中的值。
所有字段都是字符串类型,并且在任何字段值中都没有尾随/前导空格。 VBA 编译得很好,只是那个查询返回了不正确的结果。代码到达 EOF 并返回“未找到匹配的角色”
什么可能导致这个问题,我该如何解决这个问题?
【问题讨论】:
-
我建议您首先检查您的代码并检查用于评估 IF 的值。数据可能不是您所期望的。请注意,您还可以将此“IF”移动到查询中,这可能会使正在发生的事情更加明显(因为您可以直接在 MS Access 中运行查询)
-
为什么没有第二个
Then的If它甚至可以编译吗? -
@cha 修正了错字。