Поле набора данных VBA ADODB от MySQL является пустым - есть ли простой способ проверить или предотвратить «NULL»? - PullRequest
0 голосов
/ 09 мая 2018

Я извлекаю большой набор записей с сервера MySQL и назначаю кучу переменных в подпрограмме Excel VBA на основе положения поля, например:

x = MyRecordset.Fields(0).Value
y = MyRecordset.Fields(1).Value
' etc...

Единственный раз, когда выдается ошибка, это когдаодно из значений - NULL, потому что VBA не допускает, чтобы строка была NULL.У меня есть вопрос к обеим сторонам, VBA и стороне MySQL в случае, если сторона VBA падает:

VBA: В настоящее время я использую On Error Resume Next, чтобы пропустить ошибку NULL - этоЕсть ли лучший / более официальный способ добиться этого?Пропускает ли эта ошибка замедление моего кода?

MySQL: Есть ли способ предотвратить отправку "NULL", например, чтобы быстро заменить экземпляры NULL пустой строкой в ​​моем SELECT заявление?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Как это сделать:

1 - на стороне VBA

Если я не ошибаюсь, уже есть функция VBA, которая выполняет преобразование значений NULL в значения по умолчанию. В вашем случае это будет

Nz(MyRecordset.Fields(1).Value,"")

Возвращение строки нулевой длины, если значение поля равно нулю.

2 - на стороне MYSQL

Вы можете использовать функцию COALESCE, которая возвращает первое ненулевое значение в своем списке параметров. Ваш выбор будет выглядеть так:

SELECT COALESCE(myFieldName,'') 
0 голосов
/ 09 мая 2018

Если я правильно помню, если у вас есть переменная, которая может содержать ноль, конкатенация пустой строки превратит переменную в пустую строку, не влияя ни на какое другое значение. Но это может не работать с наборами записей ADO

 x = MyRecordset.Fields(0).Value & ""
0 голосов
/ 09 мая 2018

Используйте такую ​​функцию

Option Explicit

Function rcdString(rcdField As Variant) As String

    If IsNull(rcdField) Then
        rcdString = ""
    Else
        rcdString = rcdField.Value
    End If

End Function

И

x = rcdString(MyRecordset.Fields(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...