Здорово, что твой код работает сейчас, но у меня есть предложение. Вы используете 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;
}
});
});
Подзапрос (ИЗБРАННЫЙ идентификатор ОТ 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
Для этого: ОБНОВИТЕ 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];
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.
Я должен взвесить комментарий Дэвида Фентона к OP.
Это очень неприятная проблема с Jet / ACE. Но попробуйте либо:
DISTINCTROW
ключевое слово для
Предложение SELECT
, например :
UPDATE DISTINCTROW tblClient
INNER JOIN qryICMSClientCMFinite
ON tblClient.ClientID = qryICMSClientCMFinite.ClientID
SET tblClient.ClientCMType = "F";
Это решает так много проблем, связанных с этим сообщением об ошибке, что это почти нелепо.
Это MS Access в двух словах - если вы не разбираетесь в торговле -секретное решение проблемы x, вы можете потратить несколько дней, пытаясь найти ответ. Чтобы знать 10 000 обходных путей, нужно запрограммировать Access. Достаточно ли этого предупреждения для непосвященных?
Бен
This worked for me (Access 2000)
UPDATE DISTINCTROW T1 inner join T2 on T2.f1 = T1.f1 SET f2 = f2;
Мое решение состояло в том, чтобы изменить свой 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