Итак, я думал, что у меня приличное (скажем, среднее) понимание программирования VBA, но это меня поставило в тупик ...

Контекст: некоторое программирование на VBA для приложения MS-Access, которое я унаследовал. Это приложение разделено на FE / BE, при этом BE является файлом базы данных, хранящимся на сетевом сервере.

Моя первоначальная проблема была связана с уродливым исключением, когда не удалось открыть набор записей, и после поиска с помощью г-на Google я решил использовать метод GetAttr () для проверки доступа к каталогу BE.

On Error goto ErrConnect

a = GetAttr("\\server-name\directory\")
   If (a <> Null) Then
       MsgBox "is connected"
    ElseIf (a = Null) Then
       MsgBox "not connected"
    Else
       MsgBox "this is interesting..."
   End If

ErrConnect:
    MsgBox "Failed to open remote database at \\server-name\directory\"
    Resume Next

Конечно, «Resume Next» на самом деле не имеет никакого смысла, но мне любопытно, как моя переменная «a» может быть как Null, так и не Null ... (Я всегда получаю «интересное» сообщение конечно).

Это не очень странно ??

Изменить: (для информации, установка часов на "a" показывает, что они пустые)

0
caccia 17 Сен 2014 в 19:20

2 ответа

Лучший ответ

Null не является значением, с которым можно выполнять арифметические операции.

? Null = Null 
Null
? Null <> Null
Null

Итак, как видите, вы не можете использовать Null для If. Это не было бы True или False, поэтому ваша причина для выполнения Else всегда. Если да.

If a <> 0 Then
    MsgBox "Connected"
Else
    MsgBox "Not Connected"
End If

Это сработает.

0
PaulFrancis 17 Сен 2014 в 15:36

Не в C #. Кажется, что для истинного сохранения значения как нулевого, так и ненулевого потребовалось бы, чтобы компьютер сохранял данные, основанные на состояниях электронов. Затем он может быть нулевым и не нулевым, пока вы его не оцените. Однако как только данные будут обнаружены, они будут вынуждены перейти в то или иное состояние.

0
Tyler Pantuso 24 Окт 2015 в 20:35