繁体   English   中英

在MS Access中选择查询,使用VBA模块返回意外结果

[英]Select query in MS Access returning unexpected results with VBA module

我的数据库中有一个名为Employees的表,其中包括以下4个字段:Manager_Name1和Manager_Name2以及相应的经理部门Department1和Department2。 表格中的每个员工最多可以有2位经理。 除Manager_Name1和Department1字段外,表中的其余字段可以为NULL。

在一个单独的名为Master的表中,我有一个公司中所有经理及其各自部门的主表,这些字段的名称分别为ManagerID和DepartmentID。 我需要验证Manager_Name:department组合是否有效-该组合是否存在于所有经理的Master表中。

我的VBA代码的摘要如下:

Public Function validateManagers(manager1 As string, department1 as String, Optional manager2 as String = VbNull, Optional department2 as String = vbNull)

dim db As DAO.database
dim rs As DAO.Recordset
dim sqlString1 As String
dim sqlString2 As String
set db = CurrentDb

sqlString1 = "SELECT [ManagerID] FROM [Master] WHERE [ManagerID] LIKE ""*" & manager1 & "*"" And [DepartmentID] Like ""*" & department1 & "*"""

set rs = dbs.OpenRecordset(sqlString1)

If Not rs.EOF Then
    validateManagers = "Valid manager"
Else
    validateManagers = manager1 & "is not a valid manager for department" & department1
    Exit Function
End If

rs.close
set rs = Nothing

使用与上述类似的if ... then结构来验证manager2和department2,用sql字符串中的manager2和department2代替,并用db.OpenRecordset参数中的sqlString1替换sqlString2。

我在MS Access查询中调用此VBA函数。 在使用IIF子句合并两个检查时, 我得到了查询的意外结果

Sql语句如下:

SELECT IIF([Manager_Name2] Is Not Null,validateManagers([Manager_Name1],[department1],[Manager_Name2],[department2]),  
IIF([Manager_Name2] Is Null And [ManagerName1] Is Not Null,validateManagers([ManagerName1], [department1]))) AS Validate_Managers, *     
  FROM Employees;

在VBA中使用debug.print,我看到ManagerID和DepartmentID均为1 ??? 在任何字段中都没有尾随或前导空格。 VBA编译正常,并且启用了选项显式标志。 两个表中的所有字段均为字段类型文本。 字段名称被验证为既存在于表中,又存在于雇员和主表中,单词之间没有空格。

如何解决代码中的错误? 谢谢你的帮助?

如您所愿:

manager1 As string, _
department1 as String, _
Optional manager2 as String = VbNull, _
Optional department2 as String = vbNull)

这些都不是空的。 此外,vbNull为数字1,在这里没有意义。

另外,您不会将Like用于精确比较,但:

sqlString1 = "SELECT [ManagerID] FROM [Master] WHERE [ManagerID] = '" & manager1 & "' And [DepartmentID] = '" & department1 & "'"

告诉老师,更糟糕的是,整个概念是没有意义的,因为您将在具有经理ID和部门ID的字段之间设计具有适当参照完整性的表模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM