ACCESS / VBA: поле Insert Into с автонумерацией возвращает раздражающее предупреждение - PullRequest
3 голосов
/ 15 февраля 2011

Хорошо, вот ситуация
Давайте иметь Таблицу 1 (A, B, C)
A - поле для нумерации.

Я кормлю стол через vba.
Так как A является автонумерацией, я игнорирую это так:

SQL = INSERT INTO TABLE1(B,C) VALUES ('something','something else')
DoCmd.RunSQL SQL

Это работает нормально, доступ дает мне первое предупреждение, что я буду создавать новую строку.
Это нормально для меня. Однако сразу после этого я получаю это:

Microsoft Access не может добавить все записи в запросе на обновление или добавление.
Для 1 поля установлено значение Null из-за сбоя преобразования типа.
Blahblahblah Нажмите кнопку ОК, чтобы выполнить запрос в любом случае

Что не мешает его работе, если я нажимаю "ОК", но я не хочу, чтобы мой пользователь видел это предупреждение.
И вообще, почему оно всплывает? Разве не нормально оставлять поле автонумерации пустым?
Есть ли другая процедура, о которой я не знаю? Что мне не хватает?

Я посмотрел вокруг Google и здесь, но не смог найти ответ: /

(Я не хочу устанавливать предупреждения в false, поскольку я хочу, чтобы первое предупреждение о добавлении поля и любой другой возможной ошибке было видно.)

Ответы [ 3 ]

6 голосов
/ 15 февраля 2011

Microsoft Access не может добавить все записи в запросе на обновление или добавление.Для 1 поля установлено значение Null из-за сбоя преобразования типа.

Эта ошибка не имеет ничего общего с вашим полем автонумерации.Проверьте типы данных в полях B и C.

В этом примере для поля C задано число, поэтому я получаю ту же ошибку, что и вы, и INSERT завершается успешно, но с полем N в поле C:

DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','something else')"

Однако вставка числового значения в поле C работает нормально.

DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something',99)"

Редактировать : Это также работает, несмотря на предоставление текстового значения для поля C.Разница заключается в том, что текстовое значение может быть преобразовано ядром базы данных в действительное число:

DoCmd.RunSQL "INSERT INTO TABLE1(B,C) VALUES ('something','27')"
2 голосов
/ 15 февраля 2011

Звучит так, будто вы передаете пустую строку одному из значений, и для этого столбца устанавливается значение NULL.

Когда вы говорите

Что не мешаетработать, если я нажму ok

Правильно ли заполнены все поля?Включая Автономер?

2 голосов
/ 15 февраля 2011

Это явно связано с полем автонумерации?Как только запись добавлена ​​(выполнение запроса щелкает «все равно запустить»), только поле autonumber будет пустым?

Эта ошибка не должна возникать для Autonumber;по крайней мере, я никогда раньше этого не видел.

...