«Нулевое» значение в запросах - PullRequest
0 голосов
/ 21 июля 2009

Я пытаюсь запустить код, который будет копировать поля в новую таблицу, перемещая их из таблицы _New в исходную таблицу. Код VBA, который делает это, работает следующим образом:

SQLStatement = CStr("INSERT INTO " & TName & " SELECT * FROM " & TName & "_New")
Log.WriteLine "Running query with string """ & SQLStatement & """ "
QueryTimer = Timer
DoCmd.RunSQL SQLStatement
Log.WriteLine "Query time: " & (Timer - QueryTimer)

Журнал - это всего лишь несколько процедур в модуле класса, который я создал вместе. Его вывод на ошибку

@142921:  Running query with string "INSERT INTO Records SELECT * FROM Records_New" 
@142941:  Error Date/Time: 7/21/2009 2:29:40 PM
@142941:  Error # & Description: 3162, You tried to assign the Null value to a variable that is not a Variant data type.

Я могу подтвердить, что TName и SQLStatement являются действительными строками во время выполнения операции SQL и что оба источника (Records и Records_New) являются действительными. Option Explicit устанавливается в другом месте файла, чтобы избежать путаницы с опечатками. Ошибка выдается в строке DoCmd.

Почему это имеет значение Null, хотя DoCmd.RunSQL не возвращает значение?

Ответы [ 4 ]

3 голосов
/ 21 июля 2009

Можете ли вы опубликовать описания таблиц для записей и записей Records_New? Держу пари, что вы пытаетесь вставить значение NULL в один из столбцов таблицы «Records» (а описание столбца NOT NULL).

Надеюсь, это поможет.

1 голос
/ 21 июля 2009

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

Может показаться, что он не реагирует на ваш ответ, но я подозреваю, что столбцы в таблице выбора и таблице назначения либо не выстроены в ряд, либо в таблице назначения есть поле, которое запрещает ноль. *

Попробуйте это:

В новом запросе (в представлении SQL) вставьте запрос «INSERT INTO Records SELECT * FROM Records_New» и попробуйте запустить его вручную. Могу поспорить, что вы получите более конкретную ошибку и можете устранить неполадки в запросе, прежде чем выполнять его с добавленной сложностью кода вокруг него.

0 голосов
/ 21 июля 2009

Оператор INSERT INTO (Microsoft Access SQL)

Ваш оператор SQL INSERT неверен - он должен быть:

INSERT INTO Records SELECT * FROM [Records_New];

Вот что вам нужно использовать:

CStr("INSERT INTO " & TName & " SELECT * FROM [" & TName & "_New)"];")
0 голосов
/ 21 июля 2009

Может быть, Таймеру нужны парены?

QueryTimer = Timer()
...