Горе Обновления SQL в Доступе MS - Операция должно использовать обновляемый запрос

Здорово, что твой код работает сейчас, но у меня есть предложение. Вы используете jQuery, который должен сделать ваш код немного более понятным.

В вашем переключателе оцените возвращаемое значение $(this).val() вместо того, что вы положили туда. $(this) будет ссылаться на объект jQuery, к которому вы применяете событие change. Затем вместо присвоения block свойству css display с длинной ванильной линией JS используйте .show() примерно так:

jQuery(document).ready(function($) {
    $("#select-forma").change(function() {
    switch($(this).val()) {
      case 1:
        $("#mp").show();
        break;
    }
  });
});
15
задан 7 revs, 2 users 100% 1 May 2012 в 13:46
поделиться

6 ответов

Подзапрос (ИЗБРАННЫЙ идентификатор ОТ t2) не может работать, если нет только одна запись в t2. Какой идентификатор Вы ожидаете использоваться?

сообщение об ошибке, о котором сообщают обычно, происходит, когда Вы имеете соединения и не включаете все первичные ключи, необходимые для обновления назад к таблицам в связанной форме данных (например, ОТЛИЧНЫЙ оригинал уничтожает информацию о ключах, поэтому если бы это было связано с формой, то форма не смогла бы сохранить назад).

факт Вы используете ОТЛИЧНЫЙ, там сделал бы меня подозрительным, что запрос sub возвращает больше чем одну строку в Вашем более сложном примере. Это - вероятно, наиболее распространенная проблема с присвоением из sub результата запроса: под ограничением, где пункт.

Другая проблема я видел с присвоением из подзапроса, то, если синтаксис из внутреннего запроса является неправильным. По крайней мере, с SQL 2000 и 2 005 бэкэндами, процессор запросов будет тихо сбой и возвращать ПУСТОЙ УКАЗАТЕЛЬ в таких случаях. (Это, насколько я могу сказать, ошибка: Я не вижу оснований, почему что-то, что возвратит ошибку на верхнем уровне, было бы тихо разрешено в подзапросе..., но там это.)

РЕДАКТИРОВАНИЕ: Только, чтобы гарантировать, что никакой Paul или я не сходили с ума, я создал следующие таблицы:

t1 | ID, FK, Data
t2 | ID2, Data2

я сделал не , помещает любые ограничения кроме первичного ключа на идентификаторе и ID2. Все поля были текстом, который отличается от того, что я обычно использую для идентификаторов, но должен быть не важным.

t1:

ID  FK  Data
Key1        Data1
Key2        Data2
Key3        Data3

t2:

ID2 Data2
Key1    DataA
Key2    DataB
Key3    DataC

запрос А формы:

UPDATE t1 SET t1.FK = (select ID2 from t2 where t2.ID2 = t1.ID);

Неудавшийся с тем же сообщением Paul добрался.

select *, (select ID2 from t2 where t2.ID2 = t1.ID) as foreign from t1, 

работы как ожидалось, таким образом, мы знаем, синтаксис подзапроса не виноват.

UPDATE t1 SET t1.FK = 'Key1'

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

Примечание: если я изменяю бэкенд базы данных от собственного компонента SQL 2005, работы обновления! Немного поиска с помощью Google вокруг, и я нахожу Доступ MVPs, предлагающим, чтобы DLOOKUP заменял подзапрос:

http://www.eggheadcafe.com/software/aspnet/31849054/update-with-subquerycomp.aspx

, По-видимому, это - ошибка в Доступе SQL, тот, которого избегают при использовании Экспресса SQL или более высокий бэкэнд 2000 года. (Результаты Google для "подзапроса обновления доступа" поддерживают эту теорию).

Видят здесь для того, как использовать это обходное решение: http://www.techonthenet.com/access/functions/domain/dlookup.php

6
ответ дан 1 December 2019 в 01:11
поделиться

Для этого: ОБНОВИТЕ t1.f2 НАБОРА t1 = (ВЫБЕРИТЕ t2.f2 ИЗ t2 ГДЕ t2.f1 = t1.f1)

UPDATE t1 INNER JOIN t2 ON t1.f1 = t2.f1 SET t1.f2 = [t2].[f2];
0
ответ дан 1 December 2019 в 01:11
поделиться

I havent't read the whole thread, but this is the solution that I am using:

update (select * from t1 inner join t2 on t1.key = t2.key) set t1.field1 = t2.field2

and that works fine in MS Access for me.

6
ответ дан 1 December 2019 в 01:11
поделиться

Я должен взвесить комментарий Дэвида Фентона к OP.

Это очень неприятная проблема с Jet / ACE. Но попробуйте либо:

  1. перейдите к свойствам запроса (щелкните фон панели, где таблицы отображаются) и установите «Уникальные записи» на «Да»
  2. Вариант 1 эквивалентен добавлению несколько странно выглядящий DISTINCTROW ключевое слово для Предложение SELECT , например

:

UPDATE DISTINCTROW tblClient 
       INNER JOIN qryICMSClientCMFinite 
          ON tblClient.ClientID = qryICMSClientCMFinite.ClientID
   SET tblClient.ClientCMType = "F";

Это решает так много проблем, связанных с этим сообщением об ошибке, что это почти нелепо.

Это MS Access в двух словах - если вы не разбираетесь в торговле -секретное решение проблемы x, вы можете потратить несколько дней, пытаясь найти ответ. Чтобы знать 10 000 обходных путей, нужно запрограммировать Access. Достаточно ли этого предупреждения для непосвященных?

Бен

17
ответ дан 1 December 2019 в 01:11
поделиться

This worked for me (Access 2000)

UPDATE DISTINCTROW T1 inner join T2 on T2.f1 = T1.f1  SET f2 = f2;
7
ответ дан 1 December 2019 в 01:11
поделиться

Мое решение состояло в том, чтобы изменить свой sql таким образом.

  update (select o.pricein, g.pricein from operations o left join goods g on g.id = o.goodid where o.opertype = 4 and o.acct = 1) 
  set o.pricein = g.pricein
1
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: