Ошибка записи null
Типичные ошибки с Null-ами
Вот некоторые распространенные ошибки обращения с Null -ами, которые допускают новички. Если у вас нет ясности насчет Null’ов, сначала прочитайте Nulls: Do I need them?
Ошибка № 1: Null-ы в критериях
Если вы вводите условии отбора под полем в конструкторе запросов, он возвращает только совпадающие с образцом записи. Null-ы при этом исключаются из отбора.
Например, скажем, у вас есть таблица компаний и адресов. Вам нужны два запроса: один, который выдает местные компании, другой ― все остальные . В строке условий отбора в первом запросе под полем Город вы вписываете:
«Бобруйск»
и во втором запросе :
Not «Бобруйск»
Неправильно! Ни один запрос не включит записи, у которых город Null.
Решение
Используйте 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.Отчество
lngID = Me.КодКлиента
Когда поле Отчество содержит Null, попытка присвоить Null переменной строкового типа породит ошибку .
Аналогично, присвоение значения КодКлиента числовой переменной может вызвать ошибку. Даже если КодКлиента является первичным ключом, код небезопасен: первичный ключ содержит Null в новой записи.
Решения
(a) Используйте тип Variant, если вам необходимо работать с Null-ами.
(b) Используйте функцию Nz() , чтобы указать значение вместо Null. Например::
strName = Nz(Me.Отчество, «»)
lngID = Nz(Me.КодКлиента, 0)
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
Ошибка SQL: Запись значения NULL в поле, не допускающее NULL ‘_FLD6341_TYPE’
Ошибка SQL: Запись значения NULL в поле, не допускающее NULL ‘_FLD6341_TYPE’
1) Запустить реструктуризацию
2) Смотреть, что за объект метаданных вылетает
3) Когда ругается, пишет имя поля «FLD6311» — по имени поля понимаем, что за реквизит, исправляем (указываем нужное значение)
а вот пункт 3 не понял. как по имени FLD6341_TYPE Узнать что это?
В принципе 1с-ка запускается воркает. но сам факт наличия ошибок напрягает(
(проверка) ругается на:
Тестирование начато
Регистры сведений. ИсторияОбменаДанными. Проверка уникальности записей
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Измерение.УзелИнформационнойБазы 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.РезультатПоследнейЗагрузки 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.РезультатПоследнейВыгрузки 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.РезультатОтложенныхДвиженийДокументов 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.НаличиеДанныхФоновойЗагрузки 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Измерение.УзелИнформационнойБазы 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.РезультатПоследнейЗагрузки 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.РезультатПоследнейВыгрузки 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.РезультатОтложенныхДвиженийДокументов 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Проверка логической целостности. РегистрСведений.ИсторияОбменаДанными.Ресурс.НаличиеДанныхФоновойЗагрузки 01.01.1900 0:00:00:
Неверный тип хранимого значения. Сохранено пустое значение допустимого типа.
Обработка структуры базы данных.
Тестирование закончено
в процессе Обработка структуры базы данных.
В процессе обновления информационной базы произошла критическая ошибка.
по причине:
Ошибка СУБД:
Ошибка SQL: Запись значения NULL в поле, не допускающее NULL ‘_FLD6341_TYPE’
по причине:
и так каждый раз.
Заметки Лёвика
web программирование, администрирование и всякая всячина, которая может оказаться полезной
Ошибка JavaScript: есть null или не является объектом
Иногда встречается ошибка javascript … есть null или не является объектом.
Internet Explorer после такой ошибки останавливает дальнейшее выполнение сценария и (при соответствующей настройке) сообщает об ошибке желтым треугольником в левом нижнем углу.
Итак, в чем же дело.. Причем тут Null и объекты?
Очевидное объяснение — скрипт пытается обратиться к переменной, значение которой null, или же это обращение к свойству переменной, которая не является объектом. Все-таки это ошибка javascript-программы.
Частые причины ошибки “есть null или не является объектом”
1. Попытка обратиться к несуществующему свойству объекта:
a=1; alert (a.property);
2. Попытка обратиться к несуществующему элементу массива:
a = []; alert (a[1]);
Internet Explorer в сообщении об ошибке указывает строку, в которой она обнаружена. Рекомендуется проверить все похожие обращения к переменным.
Если Вам известны другие причины появления ошибки “null или не является объектом”- сообщайте в комментарии..
ps. В некоторых WYSIWYG-редакторах в ранних версиях часто встречались такие ошибки…
Опубликовано Четверг, Август 5, 2010 в 12:58 в следующих категориях: Без рубрики. Вы можете подписаться на комментарии к этому сообщению через RSS 2.0. Вы можете добавить комментарий, или trackback со своего сайта.
Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)
html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)
ссылка (для отправки по почте)
Комментарии (8) к записи “Ошибка JavaScript: есть null или не является объектом”
- Дмитрий сообщает Ноябрь 30th, 2010 в 16:20:
Я так и не понял — а что делать то? Выскакивает эта ошибка каждые 5-10 минут. Это ошибка IE? Может перейти на другой браузер?
Сообщение: ‘value’ — есть null или не является объектом
А вот что должно дать значение
n» ;
draff, сообщение “есть null или не является объектом” выдаётся, если переменная, к свойству которой происходит обращение не определена, т.е. null или не является объектом… =)
Код действительно режется.. можете воспользоваться сервисами вроде jsfiddle, выложить на pastebin (c) или любым другим способом передать.
Да это ИЕ наверно направляет меня по ложному следу ))
Давняя война VirtueMart 1.1.x с ИЕ-x , mootools
Предложил клиенту как вариант- вывесить сообщение посетителям ИМ, что не работают некоторые функции магазина.Хотя после F5 все работает.
Ошибка: ‘undefined’ is null or not an object Как исправить
Здравствуйте, у меня 1С на html-страницу ругается так: значением свойства $ или является null или оно не определено или не является объектом function
Код Java:
$(document).ready(function() <
$(’table.live_filter’).liveFilter(’fade’);
>);
$(document).ready(function() <
$(’ul.list_filter’).liveFilter(’slide’);
>);
Ругается на символ, помеченный жирным!
Не понимаю, что ему не так, хотя во всех браузерах проверял и всё работает идеально!
Oleg, судя по тексту ошибки — какие-то сложности с JQuery
Ошибка SDBL 1С 8.3
Помощь персонального менеджера, оперативность сдачи отчетности, соответствие законодательству РФ
- Исключение «простоев» работы сотрудников;
- Устранение «плохих» блокировок;
- Устранение таймаутов, диадоков, длительных запросов;
- Управляемые блокировки.
Различные конфигурации 1С из-за сложности кода, бывает, огорчают администраторов и пользователей ошибками. Многие из них легко устраняются, но существуют и те, что способны испортить достаточно «крови» ИТ-службам. Одна из таких ошибок известна в кругах специалистов по 1С под именем «Ошибка SDBL».
Исправление ошибки SDBL в 1С
Обычно сообщение об ошибке SDBL мы видим при обновлении конфигурации, сохранении изменений или работе обменов данными. Чаще всего сопровождаться она следующими сообщениями:
- Ошибка при полнотекстовом индексировании;
- Попытка вставки значения недопустимого типа;
- Поле таблицы не может принимать значение NULL;
- Ожидается выражение (pos = );
- Пропущена точка с запятой;
- Выход за пределы размерности;
- Поле определено неоднозначно.
Также эта ошибка может сопровождаться и другими информационными сообщениями. Чтобы решить эту проблему, администраторы 1С для начала применяют достаточно простые решения:
- Очистка КЭШа на сервере и компьютере пользователя, где появилась ошибка. Необходимо выйти из 1С, найти все папки с названиями типа «bd5c8ea4-b65f-4c23-a9c8-2dccfb0b15fa» в папке «Application Data» и удалить их;
- Перезагрузка сервера приложений 1С. Также может помочь включение и выключение всех связанных сервисов – SQL и его агента. Заходим на сервер, находим службу «Агент сервера 1С» и останавливаем ее с помощью контекстного меню. Аналогично поступаем со службами «SQL Server» и «Агент SQL Сервера» на сервере SQL. Затем включаем в обратной последовательности;
- Механизм «Тестирование и исправление ИБ», доступный в конфигураторе. В нужной информационной базе заходим в «Администрирование» — «Тестирование и исправление. » и запускаем процесс;
- Выгрузка базы данных в файл формата DT и загрузка его обратно в ту же информационную базу. Также выполняется в режиме конфигуратора через меню «Администрирование». Используются команды «Выгрузить информационную базу. » и «Загрузить информационную базу. »;
- Загрузка из резервной копии, если она сделана недавно. Резервные копии необходимо делать регулярно и дополнительно перед каждым серьезным действием с информационной базой. Резервные копии можно делать с помощью SQL MS или конфигуратора через выгрузку файла формата dt;
- Обновление платформы до более новой версии с официального портала ИТС. Необходимо скачать с сайта ИТС последний релиз платформы и установить на сервере и клиентских компьютерах.
Если все эти методы не дали результата, то для клиент-серверного варианта базы 1С можно попробовать очистить таблицы _ConfigChngR_ExtProps и _ConfigChngR. Делать это доверьте профессионалу, умеющему работать с MSSQL. В подавляющем большинстве случаев один из этих методов обязательно поможет. Если же ошибка осталась, и у вас нет резервной копии, следует обратиться к профессионалам за помощью.
Ошибка записи null
Описание ошибки:
Столкнулся с ошибкой при выполнении процедуры Тестирование и исправление. на этапе реструктуризации таблиц информационной базы. База клиент-серверная. 1С: Управление торговлей 10.3.31. Платформа 1С: Предприятие 8.3.9
Сложно сказать, что посчастливилось, но все же ошибка преследовала меня в базе не единожды. Но по своей сути каждая последующая формулировка «В процессе обновления информационной базы произошла критическая ошибка. » отличалсь в причине и решении незначительно. С такой ошибкой столкнулся, если быть откровенным, впервые, но интернет в принятии решения устранения ошибки сильно не помог, кроме вот этого обсуждения на форуме Как удалить строки содержащие NULL в таблице где NULL недопустимо. Зацепок решения не было. Но все же решение было найдено. Читаем. ниже.
Итак, начнем с первого факта возникновения ошибки при выполнении тестирования и исправления базы данных на этапе реструктуризации таблиц базы данных.
Полный текст ошибки:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец «_Fld412», таблицы «Торговля.dbo._Reference19NG»; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1
Если взглянуть скрином ранее, то нельзя упустить из виду подсказку, оставленую программой в левом нижнем углу окна программы, в строке состояния, о том, что выполнение реструктуризации прервалось на справочнике «Банковские счета». В базе справочник имел более 3х с половиной тысяч элементов, поэтому сходу было сложно понять, в каком из них скрывается ошибка. Была написана простая обработка, которая просто должны была обойти все элементы справочника и перезаписать их. Надежда была на то, что запись проблемного элемента завершиться ошибкой.
Исполняемый код обработки прост:
Запрос = Новый Запрос ;
Запрос . Текст = «ВЫБРАТЬ
| БанковскиеСчета.Ссылка
|ИЗ
| Справочник.БанковскиеСчета КАК БанковскиеСчета» ;
Выборка = Запрос . Выполнить (). Выбрать ();
Пока Выборка . Следующий () Цикл
СпрОбъект = Выборка . Ссылка . ПолучитьОбъект ();
СпрОбъект . Записать ();
КонецЦикла;
Предположение было оправдано. Ошибка при записи возникла. Теперь было понятно, элемент с каким кодом может быть причиной критической ошибки в процессе обновления информационной базы.
Это оказался элемент справочника, у которого не был заполнен ни одни реквизит, так что мне даже не удавалось пометить такой элемент на удаление. Дальше была написана простая обработка для удаления выбранного элемента справочника без проверки ссылочной целостности. Элемент был удален.
Тестирование и исправление было запущено повторно. Но уже вскоре после запуска процедуры в режиме реструктуризация таблиц базы мен ожидала идентичная ошибка, но уже связанная со справочником «Организации».
Новый текст ошибки отличался лишь немногим, названием таблицы и именем столбца:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец «_Fld888», таблицы «Торговля.dbo._Reference66NG»; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1
По опыту предыдущей инцидента уже казалось понятным, что в справочнике у какого-то элемента не заполнены данные. Так и оказалось. Проблемный элемент справочника был найден мгновенно и в этом случае повезло больше элемент можно было пометить на удаление, был помечен и удален с помощью «Удаление помеченных объектов».
Тестирование и исправление было запущено в третий раз. Но и этот раз не обошелся без «критической ошибки в процессе обновления информационной базы».
Текст третьей ошибки:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец «_Fld1024RRef», таблицы «Торговля.dbo._Reference88NG»; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1
Но и в этот раз программа оставила подсказку, что проблема содержится в записях справочника «ТипыЦенНоменклатурыКонтрагентов».
Удалить проблемные элементы справочника пришлось программно с помощью все той же, указанной выше простой обработки непосредственного удаления без проверки ссылочной целостности.
И в итоге очередной запуск, уже четвертый по счету, в режиме «Реструктуризация таблиц информационной базы» в рамках тестирования и исправления завершился успешно.