Access Query Error - Типы данных Null & Variant - Как я могу исправить эту ошибку? - PullRequest
4 голосов
/ 18 апреля 2009

Все,

Эта ошибка сводит меня с ума. Я потратил 2 часа, пытаясь понять это и / или обойти это без удачи. Вот ошибка:

"Вы пытались присвоить значение NULL переменной, которая не является типом данных Variant."

Вот мой SQL:

SELECT tbl_budir_002.Location_Index, tbl_parent_001.NEWPARENTID 
INTO tbl_budir_003
FROM (tbl_budir_002 
    LEFT JOIN qry_parent_003 
        ON tbl_budir_002.Location_Index = qry_parent_003.Location_Index) 
    LEFT JOIN tbl_parent_001 
        ON qry_parent_003.PARENTNAME = tbl_parent_001.PARENTNAME;

Я думаю, что в этот момент возникает сложность - tbl_parent_001 был создан через группу из другой большой таблицы (для разделения записей PARENTNAME). Мне пришлось вручную войти в таблицу и назначить поле NEWPARENTID в качестве типа autonumber, чтобы я мог дать первичным ключам записей PARENTNAME. Теперь, когда я запускаю запрос, я получаю вышеуказанную ошибку. Я подозреваю, что это номер автономера, который вызывает у меня проблемы, но я не знаю другого способа создания первичного ключа с помощью запроса.

Итак, мне нужна помощь по двум вещам: (1) устранение ошибки с учетом моей текущей настройки запроса и (2) поиск лучшего способа создания первичного ключа, чем ввод его вручную через представление дизайна таблицы. 1012 *

Спасибо, Noah

Ответы [ 4 ]

4 голосов
/ 07 января 2011

Вот что происходит: http://support.microsoft.com/kb/197587. Помимо Access 2000, информация из КБ по крайней мере относится к Access 2002 из моего опыта. Помимо методов обхода 1 и 2, если ваше решение может выдержать это, я успешно завернул поле автоматического ввода в NZ ().

0 голосов
/ 11 марта 2019

На прошлой неделе я получил сообщение об ошибке и попытался исправить это. В моем случае это было связано с тем, что я пытался добавить данные в таблицу, но не понимал, что я добавляю к первичному ключу, который представлял собой поле автоматического номера (случайно, конечно).

Как только я удалил это поле из запроса на добавление, все заработало как положено.

0 голосов
/ 18 апреля 2009

ОК, вам придется учитывать пустые значения в вашей базе данных. Это не сложно, но иногда может раздражать. Вы не можете незаметно преобразовать ноль в текст, как в число. Используйте nz - Null To Zero. Если замена текстовая, используйте «», если число как показано ниже, используйте 0. например nz(myText,"") or nz(myNumber,0)

SELECT nz(tbl_budir_002.Location_Index,0), 
       nz(tbl_parent_001.NEWPARENTID ,0)...

Вы также можете использовать IsNull (), но это не так удобно, как вам бы пришлось использовать условное выражение, чтобы установить его в другое значение. Я использую isnull по критериям и nz по всем остальным.

iif(isnull(tbl_budir_002.Location_Index),0,tbl_budir_002.Location_Index)

Веселись.

0 голосов
/ 18 апреля 2009

Похоже, ваша проблема может быть LEFT JOIN. Поскольку вы вставляете в таблицу, которая еще не существует, доступ может пытаться установить столбец NEWPARENTID в качестве первичного ключа. попробуйте выполнить запрос как JOIN, чтобы увидеть, если вы получите ту же ошибку. Вы также можете сначала попытаться создать таблицу вручную, а затем вставить, чтобы Access не приходилось угадывать, что вы хотите.

...