我想写一个VBA函数,它使用SELECT查询从Access表中获取值。下面的代码:“无效使用空值”为vba函数返回变量
Function getTableValue(uniqueID As Long, tableName As String, _
idField As String, tableField As String) As Variant
Dim db As Database
Dim rs As Recordset
Dim selectSQL As String
selectSQL = "select * from " & tableName & " where " & idField & "=" & uniqueID
Set db = OpenDatabase(dbPath)
Set rs = db.OpenRecordset(selectSQL)
If rs.RecordCount > 0 Then
rs.MoveLast
rs.MoveFirst
getTableValue = rs.Fields(tableField)
End If
End Function
当tableField
指定的字段是一个日期/时间类型,该字段为空,getTableValue()
返回一个“无效的使用Null”错误。我认为让函数返回一个Variant将允许我返回Null值;我该怎么处理这些空旷的日子?
它看起来像你复制DLookup函数(也可作为一组函数,以t开头而不是d,如tLookup)。你可能不得不使用类似这样的代码:If IsNull(rs.Fields(tableField))Then getTableValue = Null。我建议你也检查一下,确保在这个函数中真正发生错误。你确定你实际上没有回到空值,但在调用函数中处理不当吗?作为一个附注,我认为你需要在测试RecordCount之前移动你的rs.MoveLast和rs.MoveFirst代码来运行。 – HK1
@ HK1,此功能发生错误;我已经对它进行了单独测试。如果我在.recordcount = 0的记录集上调用.MoveLast,我会得到一个错误,所以我必须首先检查recordcount。 – sigil
你应该这样做,而不是:如果不是(rs.BOF和rs.EOF)然后 – HK1