Sql 基于另一个表中的数据验证一个表中的记录
这个问题是这里的一个分支。使用一个基于主表的循环来循环记录集,我能够获得内联Sql语句返回的所有记录来显示。然而,当我实际将验证代码放入循环中时,有效员工被报告为无效,反之亦然Sql 基于另一个表中的数据验证一个表中的记录,sql,ms-access,vba,Sql,Ms Access,Vba,这个问题是这里的一个分支。使用一个基于主表的循环来循环记录集,我能够获得内联Sql语句返回的所有记录来显示。然而,当我实际将验证代码放入循环中时,有效员工被报告为无效,反之亦然 Public Function validEmployee(EmpID as String) Dim Dbs As DAO.database Dim rs As DAO.recordset Dim sqlString as String set dbs = CurrentDb sqlString = "SELECT
Public Function validEmployee(EmpID as String)
Dim Dbs As DAO.database
Dim rs As DAO.recordset
Dim sqlString as String
set dbs = CurrentDb
sqlString = "SELECT [EmployeeID] FROM [MASTER] WHERE [EmployeeStatus] = 'Terminated'"
set rs = dbs.OpenRecordset(sqlString)
rs.MoveLast
rs.MoveFirst // obtain accurate count of records in recordset
If Not (rs.BOF and rs.EOF) Then // Verify recordset is not empty
Do Until rs.EOF
If InStr(1, rs.fields("EmployeeID"), EmpID, vbTextCompare) = 0
validEmployee = "Valid employee"
Else
validEmployee = "Employee" & EmpID & "is invalid"
Exit Do
End If
Loop
rs.moveNext
End If
我尝试过的一些步骤包括:
- 检查字段名中的前导空格或尾随空格
- 通过debug.print验证EmpID和rs.fields(“EmployeeID”)的值
- 检查SQL和VBA中的语法错误
- SQL语句中字符串文字的引号/转义
只使用一条记录进行比较而不使用循环可以很好地工作。您不需要循环所有记录来查找匹配项:数据库可以处理这一点
Public Function validEmployee(EmpID as String)
Dim rs As DAO.recordset
Dim sqlString as String
'add single-quotes around EmpID if it's not a numeric field
sqlString = "SELECT count([EmployeeID]) as num FROM [MASTER] " & _
" WHERE [EmployeeStatus] = 'Terminated' and " & _
" [EmployeeID] = " & EmpID
set rs = CurrentDb.OpenRecordset(sqlString)
validEmployee = rs.Fields("num").Value>0
End If
您需要在点击有问题的员工id后退出循环,但是为什么不在SQL中包含员工id呢?另外,您的
MoveNext
需要在循环之前
一个旁注:它们现在是否允许在VBA中使用/
注释?