C++Builder
Начало
Форум
Помощь
Войти
Регистрация
C++Builder
>
Forum
>
Вопросы программирования
>
Работа с базами данных в C++Builder
>
Перенос данных в связанных таблицах
Страниц: [
1
]
Вниз
Печать
Автор
Тема: Перенос данных в связанных таблицах (Прочитано 1432 раз)
VlaStr
новенький
Сказали спасибо: +0/-0
Offline
Сообщений: 2
Перенос данных в связанных таблицах
«
:
05 Декабрь 2015, 11:49:53 »
Здравствуйте уважаемые форумчане !
Прошу совета.
Ситуация следующая : SQL Server Express. Есть три таблицы - "сотрудники" (поля USER_ID, FIO и т.д. ),
"техника" (поля USER_ID, UNIT_ID, TYPE и т.д.), "история перемещений" (поля UNIT_ID и т.д.).
Таблица "техника" является подчиненной таблицы "сотрудники",
а "история перемещений" - подчиненной к таблице "техника" (связи видно видно по названию полей).
Сложность - при процедуре передачи техники от одного сотрудника другомую.
Как передать, скажем, принтер от Иванова к Петрову, чтобы при этом вместе с принтером
перрехала история всех его перемещений ?
То есть, у записи "принтер" в таблице "техника" надо изменить ключевое поле "USER_ID" с ID Иванова на
ID Петрова - но явно это сделать система не даёт.
Пользуюсь компонентами TTable.
Подскажите, как быть ?
Заранее спасибо.
Записан
gen
Участник
Сказали спасибо: +28/-0
Offline
Сообщений: 52
Re: Перенос данных в связанных таблицах
«
Ответ #1 :
08 Декабрь 2015, 15:07:45 »
У Вас несколько неправильная для указанной задачи структура данных.
Таблица - "сотрудники" (поля USER_ID, FIO и т.д. ) согласен.
Таблица - "техника". Тут не должно быть ссылки на "сотрудники", т.е. USER_ID из таблицы удалить.
Таблица - "история перемещений". Должна объединить "сотрудники" и "техника", т.е. должна быть, к примеру, такой: (ID_перемещения, USER_ID, UNIT_ID, ДАТА_начала, ДАТА_конца).
Таким образом, каждой единице техники в таблице "история перемещений" должна быть хоть 1 запись, означающая, что техника UNIT_ID установлена у пользователя USER_ID с даты "ДАТА_начала". При перемещении к другому пользователю в таблицу "история перемещений" соответственно добавляется еще 1 запись: техника UNIT_ID ,USER_ID, ДАТА_начала (а в предыдущей записи по данной технике устанавливается ДАТА_конца). В результате имеем по каждой единице техники полную историю перемещений в любой момент времени.
Пример содержимого таблицы "история перемещений":
1 ID_Иванов ID_принтер '01.06.2015' null --принтер находится у Иванова с '01.06.2015' и никуда не перемещался
2 ID_Петров ID_монитор '10.08.2015' '01.12.2015' --монитор изначально был у Петрова с '10.08.2015' до '01.12.2015'
3 ID_Сидоров ID_монитор '01.12.2015' null --монитор переместили от Петрова к Сидорову с ' 01.12.2015', где он и находится (пустая "ДАТА_конца")
Записан
VlaStr
новенький
Сказали спасибо: +0/-0
Offline
Сообщений: 2
Re: Перенос данных в связанных таблицах
«
Ответ #2 :
09 Декабрь 2015, 09:05:34 »
Спасибо за ответ, Gen. Для меня здесь главное не только любыми путями решить проблему, но и освоить методы. Всё же хотелось бы и принцип понять, как правильно переподчинять записи в связанной таблице. Указанную мной задачу ваяю "для души", никто не подгоняет. В экземплах к CBuilder-у 6 есть в папке DBTask есть пример MastApp, так вот там вроде как работает такой принцип, но с помощью TDBLookupComboBox.
Записан
Страниц: [
1
]
Вверх
Печать
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Вопросы программирования
-----------------------------
=> Общие вопросы программирования в C++Builder
=> Программирование с FMX
=> Работа с базами данных в C++Builder
=> Windows API
=> Технологии COM/DCOM, ActiveX
=> Аспекты и идеология профессиональной разработки ПО
=> Компьютерное железо и системное администрирование
=> студенческий городок
-----------------------------
Обсуждение материалов на сайте
-----------------------------
=> Обсуждений статей на сайте
=> Обсуждение материалов из файлового архива
=> Компоненты сторонних разработчиков к С++Builder
-----------------------------
Работа сайта и новости
-----------------------------
=> Ищу/предлагаю работу
=> Новости из мира программирования
=> Новости - события календаря
=> Голосования
=> Компьютерный юмор и приколы
=> Работа сайта
=> Флейм
-----------------------------
FAQ - частозадаваемые вопросы/ответы
-----------------------------
=> FAQ, общие вопросы, посвящённые C++Builder
=> FAQ, вопросы по базам данных
=> FAQ, вопросы по компонентам
Загружается...