Обновление многозначного поля в 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 для обновления реальных таблиц данными из "вспомогательной" таблицы.