Обновление многозначного поля в Access
Я создал таблицу поиска в Access, чтобы предоставить возможные значения для столбца. Теперь мне нужно обновить этот столбец с данными, которые он имел, прежде чем я преобразовал столбец. Я не могу понять SQL-запрос, который будет работать. Я продолжаю получать ошибку " запрос обновления или удаления не может содержать многозначное поле."Мое исследование показало, что мне просто нужно установить значение столбца, но это всегда обновляет 0 записей:
UPDATE [table_name] SET [column_name].Value = 55 WHERE [table_name].ID = 16;
Я знаю, что этот запрос будет работать, если я измените его, чтобы обновить текстовый столбец, поэтому это определенно проблема только с этим столбцом.
7 ответов
Если вы добавляете значение в многозначное поле, используйте запрос добавления.
INSERT INTO table_name( [column_name].Value )
VALUES (55)
WHERE ID = 16;
Если вы хотите изменить одно конкретное значение, существующее в многозначном поле, используйте инструкцию UPDATE. Например, изменить 55 на 56 ...
UPDATE [table_name]
SET [column_name].Value = 56
WHERE [column_name].Value = 55 And ID = 16;
посмотреть использование многозначных полей в запросах для получения дополнительной информации.
Я понял это! Это, конечно, противоречило интуиции! Для обновления необходимо использовать инструкцию INSERT.
-- Update a record with a multi-valued field that has no value
INSERT INTO [table_name] ( [[column_name].[Value] )
VALUES(55)
WHERE [table_name].ID = 16;
это смутило меня, потому что я ожидал инструкции UPDATE. Я думаю, что он фактически вставляет запись в скрытую таблицу, которая используется для связывания нескольких значений с этим столбцом.
Я работаю с Sharepoint, я создал таблицы как многозначные поля, столкнулся с ошибкой с моим INSERT INTO
оператор, вернулся в Sharepoint, чтобы изменить на не-многозначные поля, но это не исправило его.
воссоздал таблицу без использование многозначных полей и INSERT INTO
работала просто отлично.
Я должен сказать, что я не очень хорошо понял вашу проблему, но я видел что-то stange в вашем запросе. Попробуйте это:
UPDATE [table_name] SET [column_name]= 55 WHERE [table_name].ID = 16;
обновление:
Посмотреть этой ссылка: у него есть пример
UPDATE Issues
SET Issues.AssignedTo.Value = 10
WHERE (((Issues.AssignedTo.Value)=6)
AND ((Issues.ID)=8));
Примечания
вы всегда должны включать где предложение, определяющее только записи, которые необходимо обновить. В противном случае, вы будете обновлять записи что ты не собирался меняться. - Запрос обновления, не содержащий Предложение WHERE изменяет каждую строку в таблица. Можно указать одно значение для изменение.
Не используйте .часть значение
UPDATE [table_name] SET [column_name] = 55 WHERE [table_name].ID = 16;
INSERT INTO Quals (cTypes.[value])
SELECT Quals_ContractTypes.ContractType
FROM Quals_ContractTypes
WHERE (Quals.ID = Quals_ContractTypes.ID_Quals);
многозначное поле относится к базам данных Access, которые имеют таблицы со столбцами, которые позволяют выбрать несколько значений, например список флажков со списком.
те являются единственными типами доступа, с которыми SQL не может работать. Я проверил все возможности поиска доступа, включая жестко закодированные значения и таблицы поиска. Они работают нормально, но если у вас есть столбец с несколькими вариантами выбора, вам не повезло. Даже используя вставку в, как указано ниже, не будет работать, так как вы получите аналогичную, но другую ошибку, о вставке в многозначные поля.
Как уже упоминалось, лучше избегать использования таких таблиц вне доступа и ссылаться на таблицу специально для ваших внешних потребностей. Затем напишите сценарий macro/vba для обновления реальных таблиц данными из "вспомогательной" таблицы.