Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интересная задача по БД "Работники", Необходимо провести ликвидацию подраздел 
V
    Опции темы
DGV
Дата 4.1.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Помогите пожалуйста. Я не знаю как сделать задачу. Не получается. Необходимо ликвидировать подразделение, но чтобы его ликвидировать необходимо сначала уволить или перевести из него работников. Как делается увольнение я знаю, а вот ликвидировать не могу. 
Подскажите пожалуйста как это сделать и что в этом главное? smile  smile 
PM MAIL ICQ   Вверх
Akina
Дата 5.1.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



А теперь подробно. Что за база. Структура таблиц, связи. Ликвидация - это удаление записи из таблицы подразделений? тогда какая именно ошибка возникает при попытке удаления записи?

В общем телепатов нет, а без исходных данных помочь тебе невозможно


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DGV
Дата 5.1.2007, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Как сделать так, чтобы из таблицы подразделений удалялась запись, т.е. подразделение только в том случае, если там нет работников? Существует 4 таблицы : "дети", связанная с табл."личная" через кодсотрудника, табл. "Личная", связанная с табл. "Работа" через кодсотрудника и "Работа", связанная с "Подразделения" через кодподразделения. Типы отношений "Один-ко-многим".
PM MAIL ICQ   Вверх
DGV
Дата 5.1.2007, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Таблица Подразделения состоит из: КодПодр,НаименПолн,НаименСокр ( у всех тип данных текстовый)
Таблица Работа: КодР (счетчик), КодСотр (числовой), ДатаРаб (Дата/время), ДатаПрик (Дата/время), НомПрик (числовой), КодПодр (Текстовый),  Должность (Текстовый), Оклад (денежный), ПризнакПоследней (логический)
Таблица Личная : КодСотр (Счетчик), ФИО (текстовый), ДатаРожд (Дата/время), Образов, СемПолож, Адрес, Город, ПочтИнд, Телефон, Пол (Текстовые)
Таблица Дети: КодД (Счетчик), КодСотр (Числовой), Имя (Текстовый), ДатаРожд (Дата/время)
PM MAIL ICQ   Вверх
dionisiu
Дата 5.1.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



Иерархия (струтура) вроде правильная.
Следовательно, таблица Подразделения - это справочник для таблицы Работа.

из фразы автора 
Цитата(DGV @  4.1.2007,  21:10 Найти цитируемый пост)
ликвидировать не могу. 

следует, что в базе (оболочке) предусмотрен способ удалить сотрудника, но нет способа удалить подразделение.
То есть два варианта: либо автор не знает, как удалить запись из таблицы руками, либо связи таблиц этого не позволяют и вылезает непреодолимая для автора ошибка, хотя в этом случае автор мог её и выложить, или упомянуть, чего не произошло.


Думаю, надо из таблицы Работа удалить все упоминания о КодПодр требуемого подразделения (либо руками, либо "переводом" сотрудника), после чего руками удалить запись с таким КодПодр из таблицы Подразделения


А если речь идёт о необходимости расширить функционал существующей (изготавливаемой автором) базы, то это другой вопрос
PM MAIL ICQ   Вверх
Rodman
Дата 5.1.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Цитата(dionisiu @  5.1.2007,  10:11 Найти цитируемый пост)
Думаю, надо из таблицы Работа удалить все упоминания о КодПодр требуемого подразделения

если у него стоит каскадное удаление, то записи удалятся из всех таблиц (неувольняя никого)
PM MAIL WWW Skype GTalk YIM MSN   Вверх
dionisiu
Дата 5.1.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



или с работниками вместе, если каскадное удаление полное. Ведь при удаленни из таблы Работа записей с КодПодр=удаляемое подразделение, оттуда же вылетят работники  с детями, а это уже произвол работодателя и БОЛЬШОЙ просчёт архитектора базы.
PM MAIL ICQ   Вверх
DGV
Дата 5.1.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Т.е. надо сначала сделать перевод сотрудников, а затем удалить запись с таким КодПодр из таблицы Подразделения, но как задать это условие в программе? Необходимо, чтобы была форма, на которой кнопка, при нажатии, на которую удалялось бы подразделение, но только при условии,что из него все сотрудники уволены или переведены. 



PM MAIL ICQ   Вверх
Rodman
Дата 5.1.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



напиши запрос 
Код

SELECT count(Работа.IDCodePodr), count(Личная.IDCodePodr), count(Дети.IDCodePodr)  FROM Работа, Дети, Личная
WHERE Работа.IDCodePodr = Param and Личная.IDCodePodr= Param and  Дети.IDCodePodr=Param;


и проверяй при нажатии на кнопку наличие нулей..
PM MAIL WWW Skype GTalk YIM MSN   Вверх
DGV
Дата 5.1.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Спасибо, попробую

Добавлено @ 15:49 
какие есть ещё варианты и предложения?Пишите пожалуйста.
PM MAIL ICQ   Вверх
dionisiu
Дата 5.1.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



кусок базы дай.
PM MAIL ICQ   Вверх
DGV
Дата 5.1.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Это для формы на увольнение, аналогично надо сделать для ликвидации.
Код

Option Compare Database
Const strSQL1 = "select КодСотр,Фамилия, Имя, Отчество from Запрос1 where КодПодр='"
Const strSQL2 = "select * from Работа выбранного where КодСотр="
Const strSQL3 = "update Работа set Работа.ПризнакПоследней = no where Работа.КодСотр="
Private intCtr As Integer
Private strSQL As String

Private Sub cboPodr_AfterUpdate()
If Me!cboPodr.Value <> "" Then
strSQL = strSQL1 & Me!cboPodr.Value & "'"
Me!lstRabotniki.RowSource = strSQL
Me!lstRabotniki.Requery
End If
End Sub

Private Sub lstRabotniki_DblClick(Cancel As Integer)
Dim strSQL As String
If Me!lstRabotniki.Value <> "" Then
strSQL = strSQL2 & Me!lstRabotniki.Value & ";"
Me!lstUvolennyi.RowSource = strSQL
Me!lstUvolennyi.Requery
End If
End Sub

Private Sub cmbAdd_Click()
Dim C As Long
Dim strSQL6 As String
Dim Pr As Boolean
Dim db As Database
Set db = CurrentDb
strSQL = strSQL3 & Me!lstRabotniki.Value & ";"
db.Execute strSQL
Const strSQL4 = "select max(Работа.КодР) as [max-КодР] from Работа;"
Const strSQL5 = "select last([Личная].[Кодсотр]) as [last-КодСотр] from личная order by last([Личная].[КодСотр]);"
Dim P As String
Dim P1 As Long
Me!lstPosledn.RowSource = strSQL4
Me!lstPosledn.Requery
P = lstPosledn.Column(0, 0)
P1 = CInt(P)
P1 = P1 + 1
Dim A As String
Dim A1 As Long
Me!lstIndex.RowSource = strSQL5
Me!lstIndex.Requery
A = lstIndex.Column(0, 0)
A1 = CInt(A)
A1 = A1 + 1
C = 0
Pr = True
strSQL6 = "insert into Работа(КодР, Кодсотр, ДатаРаб, ДатаПрик, НомПрик, КодПодр, Должность, Оклад, ПризнакПоследней)" & _
"values (" & CStr(P1) & ", '" & CStr(Me!lstUvolennyi.Column(1, 1)) & "', '" & txtDate & "', '" & txtDatePrik & "', " & CStr(txtNomer) & ", '" & CStr(cboPodr) & "', '" & CStr(Me!lstUvolennyi.Column(6, 1)) & "', " & CStr(C) & ", " & CStr(Pr) & ");"
db.Execute strSQL6
End Sub

Private Sub cmbPrikaz_Click()
Dim oApp As Object
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open FileName:="Z:\Мои Документы\ПриказУвольнение.doc"
'oApp.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wgToggle
oApp.Visible = True
exit_cmbPrikaz_Click:
Exit Sub
err_cmbPrikaz_Click:
MsgBox Err.Description
Resume exit_cmbPrikaz_Click
End Sub


Это сообщение отредактировал(а) DGV - 5.1.2007, 18:48
PM MAIL ICQ   Вверх
dionisiu
Дата 6.1.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



ковыряюсь в базе. сразу несколько вопросов: что имеется ввиду в поле ДатаРаб? ведь есть поле ДатаПрик - хранящее дату приказа о приёме (или перемещении на новую должность?) Например, товарищ Борисов П.А. - 05,10,90 принят инженером, а с 15,10,95 - начальником ВЦ. При этом код работы другой, а ДатаРаб в первой записи отличается от ДатаПрик. 

или это небрежный пример?
PM MAIL ICQ   Вверх
DGV
Дата 6.1.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



Я понимаю это так: ДатаРаб - это когда сотрудник был принят на работу, а ДатаПрик - это дата приказа об увольнении. dionisiu большое спасибо за попытки разобраться в базе. smile 
PM MAIL ICQ   Вверх
DGV
Дата 7.1.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.12.2005

Репутация: нет
Всего: нет



С Рождеством всех!!!!! Всего самого наилучшего, исполнения желаний!

Добавлено @ 16:02 
Вот такой ещё вопрос: Какое свойство задаёт количество строк в ListBox?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.