Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Ошибка 3113 "Невозможно обновить поле <field name>; необновляемое поле"

Всем привет, есть клиент (пользователей около 20) и серверная часть (ACCESS файл который лежит на сетевой папке), дали доступ к ней всем тем кому дали клиентскую часть. В файле клиент есть кнопка, на клик по этой кнопке поставил запрос

CurrentDb.Execute "UPDATE AutoOfRec INNER JOIN Auto ON AutoOfRec.APPLICATION_NUMBER = Auto.APPLICATION_NUMBER SET Auto.Изъятие = [AutoOfRec]![Изъятие];"

на самом деле запрос большой (обновляет где то 35 полей).

Таблица AutoOfRec содержит данные которые вводит юсер на форме, а таблица Auto связанная таблица которая лежит на сетевом диске.

После того как он ввел данные должен нажать кнопку "Сохранить" и после ее нажатия вываливается ошибка 3113 "Невозможно обновить поле <field name>; необновляемое поле", в связи с чем может появляться данная ошибка? Получается что если я первый открыл клиента то я могу обновлять а уже остальные не могут, хотя у файла "Общий доступ". может я не то сделал?
Ответ: Да, это могло быть причиной, иногда сообщения об ошибках не соответствуют реальной причине.
Вопрос: Обновить поле

Подскажите как при сохранении данных в одной таблице обновить данные в поле связанной таблице.
Ответ:
Сообщение от li_ka99
мне надо автоматически менять этот статус на "обработан" , как только введены данные в подчиненную таблицу по выбранному документу.
Непосредственно в самой таблице не сделать. Таблица не имеет событий по которым можно произвести действия. К тому же в Access нет триггеров. Точнее нет полноценных триггеров.
А в форме сделать несложно. На процедуре на событии AfterUpdate формы с подчиненной таблицей обновляется главная таблица. Любым способом - запросом или рекордсетом не важно
Например рекодсетом (в предположении, что поле [код документа] числовое):
Visual Basic
1
2
3
4
5
6
7
with currentdb.openrecordset("select статус from Главная where [код документа]=" & me.[код документа])
  If not .eof then
    .edit
    !статус="обработан"
    .update
  end if
end with
Вопрос: автоматически обновить поле в форме при добавлении нового значения в поле со списком

помогите плииииз,
у меня форма в ней поля: код(счетчик); фамилия(текст); профессия(подстановка из таблицы "профессия"); разряд(подстановка из таблицы "разряд"); тариф(числовой)
проблема с последним полем, оно у меня есть в таблице "разряд", хочу сделать так, чтобы при вводе в поле "разряд" значения, поле "тариф" получало соответствующее значение. а при отсутствии в нем значения я мог бы его добавить.
как это организовать не прибегая к Сабформам или дополнительному полю со списком?
к теме приложен пример!

З.Ы. кому интересно в форме организовано добавление в поле со списком, а так же каскадное добовление в поля со списком.

заранее спасибо!
Ответ: Sazabi, так это и есть по возрастанию или убыванию, только не поле счетчик сортируй а то поле что тебе нужно!
Вопрос: Как с SQL обновить поле, в которое является связанным через список со справочником

Здравствуйте!
Есть БД в Acces.
Мне необходим запрос, который бы обновлял поле в таблице T1, но не по ID связанного поля, а по его значению….т.е. я хочу писать не
SQL
1
UPDATE T1 SET Q1=2
А вот так
SQL
1
UPDATE T1Set Q1='q1'
Первый запрос работает, а второй нет

C клавиатуры я в поле Q1 могу занести значение q1, а через вот запрос нет….
Подскажите как???
БД прикладываю
Ответ:
SQL
1
2
3
UPDATE T1, Spr 
SET T1.Q1 = [Spr].[Код]
WHERE Поле1="Q1"
Вопрос: Как в одном запросе обновить поле таблицы расчетным значением другого поля

Вопрос такой, в update-запросе высчитываю и обновляю поле F1,
а поле F2 должно принять значение исходя из вновь расcчитанного значения поля F1.

update T 
set 
F1 = nullif(trim(coalesce(F1||' ', '') || case when СЛОЖНОЕ_УСЛОВИЕ_1 then ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_1 else '' end ) = ''),
F2 = case when СЛОЖНОЕ_УСЛОВИЕ_2 and F1 is not null then ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_2 else F2 end
where ...


Но новое значение поля F1 не видно внутри запроса до самого комита, а заново высчитывать СЛОЖНОЕ_УСЛОВИЕ_1 и делать ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_1 затратно.

Заранее благодарен за помощь!
Ответ:
PgSQLanonymous2
А разве этого не хватит?

CREATE TABLE t (f1 INT, f2 INT);
INSERT INTO t VALUES (1,2), (3,4), (5,6), (7,8), (9, 0);

UPDATE t 
   SET (f1, f2) = (SELECT n.f1_new, (CASE WHEN t.f1 > 1 AND n.f1_new < 40 THEN n.f1_new ELSE 4 END)
 	             FROM (SELECT CAST((t.f1 * random() + t.f2) AS INT)) AS n(f1_new));


Наверное, хватит.
Как я понял, Вы предлагаете рассчитав поле f1, положить результат в табличную переменную n с полем f1_new,
а далее использовать ее в явном и не явном (с дальнейшей калькуляцией) виде для обновления f1 и f2, соответственно.
Другого варианта, похоже, нет.
Спасибо!!!
Вопрос: Обновить поле значением другого поля.

Всем привет,

Читал, что для перестановки значений полей в одной строке таблицы, нужно использовать JOIN.

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

UPDATE my_table
set
  f1 = f2,
  f2 = f3,
  f3 = f4,
  f4 = 'new value'
WHERE <condition>; 


Попробовал, так работает. Но можно ли это использовать в реальном проекте? Нет подводных камней?

Спасибо
Ответ: Но значение, к которому добавляется неделя всегда есть. NULL это поле для оригинального значения при его изменении.
То есть - есть расписание. И если с определенной даты оно сдвигается, то сдвигаются только даты этого же дня недели.
При этом ставится кто сдвигал и когда. Запрос типа

UPDATE hometasks
    SET 
       ht_date_pre = ht_date,
       ht_date = DATE_ADD(ht_date, INTERVAL 1 WEEK),
       ht_user_id = 10,
       ht_ts = '<timestamp>'				
    WHERE ht_cli_id = 4 
                AND ht_date >= '<start_date>'
                AND DAYOFWEEK(ht_date) = DAYOFWEEK(<start_date>);


Получается в моем случае даже не нужно запоминать дату, так как сдвигается на одну неделю, а просто ставить флаг сдвига, а при откате последнего сдвига просто отнимать одну неделю.
Вопрос: Обновить поле при нажатии клавиши

Добрый день, Уважаемые гуру Access.

Подскажите пожалуйста, есть форма логина и пароля, хочу при вводе в поле пароля, после нажатии клавиши Enter, сделать проверку на верность, но беда в следующем. Пока не переключусь на другое поле данное остается до обновление пустым (Null) , не могу понять как отследить/сохранить изменения.

В качестве примера файл во вложении.
Ответ: подставил, норм пошло
Вопрос: RunSQL обновить логическое поле

Есть таблица Заказы с полем Выполнен.

По нажатию кнопки пытаюсь обновить поле "Выполнен" (Boolean) в таблице "Заказы"

В обработчике события нажатия кнопки:

SQL
1
DoCmd.RunSQL "UPDATE [Заказы] SET [Выполнен]='0' WHERE [Заказы].[Выполнен]= '" & Me.НомерЗаказа & "'"
Me.НомерЗаказа - номер нужной строки в таблице Заказы

Пишет
RunTime Error
"Несоответствие типов данных в выражении условия отбора"


как правильно записать типы
Ответ: Спасибо Всем
Вот так получилось
Visual Basic
1
DoCmd.RunSQL "UPDATE [Заказы] SET [Выполнен]= 0 WHERE [Заказы].[НомерЗаказа]= " & Me.НомерЗаказа & ""
Вопрос: Поле подстановки на основании запроса

Добрый день
При создании поля подстановки в форме на основании запроса, есть следующая проблема.
Выпадающий список есть, но можно только просмотреть что в списке, сделать выбор в поле нельзя.
Может быть кто-то сталкивался с подобной проблемой и знает, в чем косяк? чтобы я не выкладывал базу
Ответ: mobile, Эти все параметры проверял - все ок.
Сделал по другому. Пересоздал поле в таблице, сделал подстановку на основании запроса. Соответственно добавил обновленное поле на форму, вроде работает.
Не знаю, правильное это решение или нет
Вопрос: Подзапрос в Access

Имеется таблица Студенты(Номер студента, Фамилия, Имя, Отчество, Пол, Группа)
Задание:
Вывести на печать количество девушек, юношей и общее количество студентов в каждой группе.
Я так понимаю нужно сделать подзапрос, но не выходит. В интернет искал, но не понял как делать.
Пробовал вот так. Нужно, чтобы всё было в одном запросе.
SQL
1
2
3
4
5
SELECT  Студенты.Группа, Студенты.Пол, COUNT(Студенты.Пол) AS [Количество]
FROM Студенты
 WHERE (SELECT Студенты.Группа, COUNT ("Студенты.Номер студента")
                 FROM Студенты GROUP BY Студенты.Группа)
GROUP BY Студенты.Группа, Студенты.Пол;
Помогите пожалуйста.
Ответ:
Сообщение от NTseva
количество девушек, юношей и общее количество студентов в каждой группе.
SQL
1
2
3
4
5
6
SELECT Студенты.Группа, 
COUNT(*) AS Всего, 
-SUM(Пол="Ж") AS Девушек,
-SUM(Пол="М") AS Юношей
FROM Студенты
GROUP BY Студенты.Группа