Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пересчет значений поля по условию
 
 автор: lukas75   (27.10.2008 в 03:54)   личное сообщение
 
 

Простите меня за возможно раздражающую тупость.
Access 2007. Ввод данных в таблицу производится из формы.
Задача: при введении новой записи требуется автоматически изменить значения поля для некоторой части записей.
Подробнее: Имеется поле "код_сотрудника" - ключевое, но не счетчик. Благодаря этому полю все сотрудники "выстраиваются" в таблице по иерархии (по званию, должности). Поэтому, при вводе новой записи значение "код_сотрудника" должно определяться пользователем, чтобы вводимый сотрудник получил код, опрелеяющий "правильное" место в иерархии списка. В форме разворачивается поле со списком: [код_сотр] [звание] [ФИО]. Пользователь выбирает в этом списке запись, "за которой"нужно поместить новую. Новая вводимая запись должна получить значение поля "код_сотрудника" на 1 больше того, кого пользователь выберет в раскрывающемся поле со списком. Другие записи должны при этом "пересчитаться": значения, которые меньше (либо равно) выбранного - остаться прежними, значения больше выбранного - увеличиться на 1. Образно говоря - новая запись как бы "вклинивается" в указанный промежуток. Но поскольку поле "код_сотрудника" ключевое - то не может быть одновременно одинакового значения в двух записях. Я сейчас это делаю вручную. И увеличивать на единицу приходится начиная с наибольшего значения, чтобы избежать одинаковых чисел. Устал это делать. Если у кого есть решение этой задачи буду премного обязан. Не встречали ли подходящей процедуры? Не вините за дилетанство.

  Ответить  
 
 автор: osmor   (27.10.2008 в 09:01)   личное сообщение
 
 

На мой взгляд решение выбрано крайне неудачное. Нельзя изменение ключевого поля вводить в правило, это должно быть исключением.
Построение иерархии лучше делать добавлением полей
"Код родителя" - код записи которая является родителем (начальником или подразделением) для текущей"
"вес должности (или отдела) в иерархии" - чем выше должность тем выше уровень
например:
начальник отдела - 10
зам. начальника - 20
начальник сектора - 30
это позволит сортировать сотрудников в зависимости должности внутри одного подразделения
такой же "вес" можно ввести для подразделений
Сотрудники с одинаковым "весом" должности сортируются по алфавиту.
при такой структуре добавление нового (перемещении) сотрудника не требует изменения в других записях. если вдруг сотрудник начальником отдела, он просто получает должность с новым "весом" и автоматически перемещается вверх по списку.

локально решить Вашу задачу можно запросом на обновление увеличивающего на 1 коды всех сотрудников у которых код больше чем код добавляемого сотрудника


UPDATE tblStuff SET код_сотр = [код_сотр]+1
WHERE [код_сотр]>=[новый код];

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList