«неверное использование нуля» для функции vba, которая возвращает вариант - PullRequest
3 голосов
/ 25 октября 2011

Я пытаюсь написать функцию VBA, которая получает значение из таблицы Access, используя запрос SELECT.Вот код:

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() возвращает ошибку «Недопустимое использование нулевого значения».Я думал, что возвращение функции Variant позволит мне возвращать нулевые значения;что я должен сделать, чтобы обработать эти пустые даты?

Ответы [ 4 ]

6 голосов
/ 25 октября 2011

Оказывается, что нулевое значение функции было передано в переменную Date / Time. Я исправил это, используя следующее:

dim myDate as date
dim myVar as variant

myVar=getTableValue(idNum,"thisTable","idField", "valueField")
if isNull(myVar) then
 myDate=0
else
 myDate=myVar
endif

Хотя он не проверяет, возвращает ли myVar Дата, значения valueField имеют тип Дата / Время, так что все в порядке.

0 голосов
/ 06 октября 2016

Я бы изменил функцию, чтобы она возвращала строку. Затем используйте nz() для обработки нуля, сделав строку нулевой длины.

getTableValue = nz(rs.Fields(tableField),"")
0 голосов
/ 25 октября 2011

Может быть, используя Nz?getTAbleValue = Nz (rsFields (tableField), SomeReplacementDate)

Я предполагаю, что смысл заключается в использовании возвращаемого значения из этой функции.Либо вы всегда возвращаете что-то правильное, либо вам нужно проверить возвращаемое значение этой функции.

Я должен признать, что не знаю, что может означать нулевая дата.И у вас есть идея, что это может быть?

0 голосов
/ 25 октября 2011

Посмотрите на Эта ссылка

Variant не может содержать нулевое значение, возвращенное из БД.Вам нужно проверить, имеет ли значение null, и вернуть эквивалент vbNull (не знаю, можно ли использовать vbNull в VBA).

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...