Access проверка на null

2 [2008-10-26 23:09:00]

Я новичок в Access. У меня есть таблица, полная записей. Я хочу написать функцию, чтобы проверить, является ли какой-либо идентификатор нулевым или пустым. Если это так, я хочу обновить его с помощью xxxxx. Проверка идентификатора должна выполняться через все таблицы в базе данных. Может ли кто-нибудь предоставить пример кода?

3 ответа

Я не уверен, что вы сможете найти все таблицы в базе данных с Access SQL. Вместо этого вам может понадобиться написать несколько VBA для циклического преобразования таблиц и генерации некоторого SQL для каждой таблицы. Что-то вроде:

0 [2008-11-05 19:23:00]

Проверьте функцию Nz(). Он оставляет поля неизменными, если они не равны нулю, когда он заменяет их тем, что вы указываете.

Для разумных чисел и размеров таблиц это может быть быстрее

  • открыть их
  • сортировать по каждому полю по очереди
  • проверить на нулевые значения и заменить вручную

Хорошая практика, чтобы выяснить, откуда берутся нули и остановить их – указать значения полей по умолчанию, использовать Nz() на входах. И пусть ваш код обрабатывает любые нули, которые проскальзывают через сеть.

Я называю это функцией UpdateFieldWhereNull, и показана подпрограмма, которая ее вызывает (адаптирована из http://www.aislebyaisle.com/access/vba_backend_code.htm)

Он обновляет все таблицы в параметре DbPath (не тестируется, обрабатывает с осторожностью):

А втор Allen Browne, ноябрь 1999 г.
http://allenbrowne.com/casu-12.html
Перевод: А. Артамонов, октябрь 2011г.

Типичные ошибки с Null-ами

Вот некоторые распространенные ошибки обращения с Null -ами, которые допускают новички. Если у вас нет ясности насчет Null’ов, сначала прочитайте Nulls: Do I need them?

Ошибка № 1: Null-ы в критериях

Если вы вводите условии отбора под полем в конструкторе запросов, он возвращает только совпадающие с образцом записи. Null-ы при этом исключаются из отбора.
Например, скажем, у вас есть таблица компаний и адресов. Вам нужны два запроса: один, который выдает местные компании, другой ― все остальные . В строке условий отбора в первом запросе под полем Город вы вписываете:
"Бобруйск"
и во втором запросе :
Not "Бобруйск"
Неправильно! Ни один запрос не включит записи, у которых город Null.

Читайте также:  Преимущества теле2 перед другими операторами

Используйте Is Null . Во втором запросе, чтобы достичь желаемого результата, условия отбора должны выглядеть как:
Is Null Or Not "Бобруйск"
Примечание: Запросы DDL (языка определения данных) обращаются с Null-ами иначе. Например, Null-ы учитываются в таком типе запроса:
ALTER TABLE Table1 ADD CONSTRAINT chk1 CHECK (99 ‘TX’));

Ошибка № 2: Null-ы в выражениях

Результатом вычислений, включающих Null, обычно является Null. Например, новички иногда вводят выражение в источник данных текстового поля, чтобы вывести остаток к оплате:
=[СуммаКОплате] – [СуммаУплаченная]
Проблема в том, что если не было оплачено ничего, СуммаУплаченная является Null-ом, и в текстовом поле ничего не отображается.

Используйте функцию Nz(), чтобы указать значение для Null-а:
= Nz([СуммаКОплате], 0) – Nz([СуммаУплаченная], 0)

Ошибка № 3: Null-ы во внешних ключах

В то время, как Аксесс запрещает Null-ы в первичных ключах, он разрешает Null-ы во внешних. В большинстве случаев стоит явно запрещать эту возможность, ч тобы избежать висящих ссылок .
В типичной таблице для накладных, строки накладной хранятся в таблице НакладнаяСтроки, соединенной с таблицей Накладные по НакладнаяКод. Вы создаете связь между Накладные.НакладнаяКод и НакладнаяСтроки.НакладнаяКод с поддержкой ссылочной целостности . Этого недостаточно!
Если вы не установили свойство Обязательное поля НакладнаяКод в таблице НакладнаяСтроки на Да , Аксесс разрешает Null-ы. Чаще всего это случается, когда пользователь начинает добавлять строки в подформе, не создав сперва саму накладную в основной форме. Так как у этих записей нет соответствующей им записи в основной форме, эти висящие записи больше нигде не показываются снова. Пользователь уверен, что программа их удалила, хотя на самом деле они находятся в таблице.

Всегда выставляйте значение свойства Обязательное на Да в конструкторе таблиц, если только вам не нужна возможность иметь Null-ы во внешних ключах.

Ошибка № 4: Null-ы и типы, отличные от Variant.

В Visual Basic единственным типом данных, который может содержать Null является Variant. Когда бы вы ни присваивали значение поля в переменную с типом не-Variant, всегда нужно учитывать возможность, что в поле может содержаться Null. Посмотрите, что в этом коде модуля формы может пойти не так:
Dim strName as String
Dim lngID As Long
strName = Me.Отчество
lng >
Когда поле Отчество содержит Null, попытка присвоить Null переменной строкового типа породит ошибку .
Аналогично, присвоение значения КодКлиента числовой переменной может вызвать ошибку. Даже если КодКлиента является первичным ключом, код небезопасен: первичный ключ содержит Null в новой записи.

Читайте также:  Способы загрузки mac os

(a) Используйте тип Variant, если вам необходимо работать с Null-ами.
(b) Используйте функцию Nz() , чтобы указать значение вместо Null. Например::
strName = Nz(Me.Отчество, "")
lng >

Error 5: Сравнение с Null

Выражение:
If [Фамилия] = Null Then
будет бессмысленно, так как никогда не может быть истинно. Даже если фамилия является Null-ом, VBA полагает, что вы спросили::
Является ли Неизвестное равным Неизвестному?
и всегда отвечает: “Откуда мне знать, равны ли ваши неизвестные друг другу? Здесь мы опять наблюдаем распространение Null : результат не является ни истинным ни ложным.

Используйте функцию IsNull() :
If IsNull([Фамилия]) Then

Ошибка № 6: Забыли, что Null ни Истина ни Ложь.

Выполняют ли эти две конструкции одну и ту же работу?
(a) If [Фамилия] = "Иванов" Then
MsgBox "Это Иванов”
Else
MsgBox "Это не Иванов"
End If

(b) If [Фамилия] <> "Иванов" Then
MsgBox "Это не Иванов"
Else
MsgBox "Это Иванов”
End If
Когда фамилия является Null-ом, эти два куска кода противоречат друг другу. В обоих случаях, первая часть If не срабатывает, и начинается выполнение Else, что приводит к противоречащим друг другу сообщениям.

(a) Учитывайте все три возможных результата сравнения – True, False, и Null :
If [Фамилия] = "Иванов" Then
MsgBox "Это Иванов”
ElseIf [Фамилия] <> "Иванов" Then
MsgBox "Это не Иванов”
Else
MsgBox "Мы не знаем, Иванов это или нет"
End If
(b) В некоторых случаях, функция Nz() позволит обработать два случая разом. Например, рассматривать Null и нулевую строку одинаково:
If Len(Nz([Фамилия],"")) = 0 Then 

Возвращает значение типа Boolean, которое указывает, не содержит ли выражение достоверных данных (Null). Returns a Boolean value that indicates whether an expression contains no valid data (Null).

Синтаксис Syntax

IsNull (Expression) IsNull(expression)

Примечания Remarks

IsNull возвращает значение True (Истина), если используется expression равное Null; в другом случае IsNull возвращает значение False (Ложь). IsNull returns True if expression is Null; otherwise, IsNull returns False. Если expression состоит из нескольких переменных, значение Null, заданное для одной из них, приводит к возврату значения True для всего выражения. If expression consists of more than one variable, Null in any constituent variable causes True to be returned for the entire expression.

Читайте также:  Как настроить интернет мегафон на компьютере

Значение Null указывает, что Variant не содержит достоверных значений. The Null value indicates that the Variant contains no valid data. Null не приравнивается к значению Empty (Пусто), которое указывает, что переменная не была инициализирована. Null is not the same as Empty, which indicates that a variable has not yet been initialized. Оно также не равно строке нулевой длины (""), которую иногда называют пустой строкой. It is also not the same as a zero-length string (""), which is sometimes referred to as a null string.

Используйте функцию IsNull, чтобы определить, содержит ли выражение значение Null. Use the IsNull function to determine whether an expression contains a Null value. Выражения, которые могут ожидать вычисления значения true в некоторых обстоятельствах, например, If Var = Null и If Var <> Null , всегда имеют значение false. Expressions that you might expect to evaluate to True under some circumstances, such as If Var = Null and If Var <> Null , are always False. Это связано с тем, что любое выражение, содержащее значение NULL , само по себе имеет значение NULL и поэтому имеет значение false. This is because any expression containing a Null is itself Null and therefore False.

Пример Example

В этом примере используется функция IsNull, чтобы определить, содержит ли переменная значение Null. This example uses the IsNull function to determine if a variable contains a Null.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector