Поле набора записей VBA ADODB - это ноль из MySQL - есть ли простой способ проверить или предотвратить «NULL»?

0

Я вытаскиваю большой набор записей с сервера 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?

  • 0
    Вы пытались использовать «НЕ НУЛЬ» в своем запросе?
  • 0
    stackoverflow.com/questions/5285448/...
Показать ещё 4 комментария
Теги:
excel-vba
excel

3 ответа

1
Лучший ответ

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

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))
  • 0
    Спасибо, я приму это, у меня есть модуль преобразования функций подобного рода, поэтому я думаю, что это будет хорошо вписываться в этот набор инструментов.
1

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

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

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

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

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

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

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

SELECT COALESCE(myFieldName,'') 
  • 0
    Привет, спасибо за ввод, функция Nz() видимому, работает только в Access, и я использую Excel - полезно, хотя, так как я выполнил поиск и увидел хороший фрагмент для воссоздания его на основе IIF() - как для идеи COALESCE() , также отлично, я проведу несколько тестов скорости, используя оба, чтобы увидеть, какой из них быстрее - я думаю, что пост-запрос обработки в Excel мог бы быть быстрее и возложить «CPU» на пользовательское приложение, а не на сервер.
0

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

 x = MyRecordset.Fields(0).Value & ""

Ещё вопросы

Сообщество Overcoder
Наверх
Меню