Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2008, 15:19   #1
FIIR
Пользователь
 
Регистрация: 22.02.2008
Сообщений: 14
По умолчанию Нет Темы, но помощь нужна

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

И вот такая процедурка

procedure TfmMain.SetTransfer(EmpID: integer;
EmpLastName, EmpFirstName,
EmpFatherName, OldDep, NewDep,
OldPos, NewPos: string );
begin
Application.CreateForm(TfmTransfer, fmTransfer);
with fmTransfer, dmStaff, sidsJobs do
begin
LaedName.Text := EmpLastName + ' ' +
EmpFirstName + ' ' +
EmpFatherName;
LaedDepFrom.Text:= OldDep;
LaedDepTo.Text:= NewDep;
LaedPosFrom.Text:= OldPos;
laedPosTo.Text:= NewPos;
dtpDate.Date:= Now;
ShowModal;
if Locate('EmpID;StopDate', VarArrayOf([EmpID,null]),[])
then
begin
Edit;
sidsJobsStopDate.AsDateTime:= dtpDate.Date;
sidsJobsStopCauses.AsString:=
cbCauses.Text;
sidsJobsOutOrderNum.AsString:=
edOrderNum.Text;
Post;
end;
InsertRecord([EmpID, dtpDate.Date, nil,
ReadStrParam('Организация'),
NewDep, NewPos, '', '1',
edOrderNum.Text, '']);
ApplyUpdates(0);
end;
fmTransfer.Free;
end;

И вот так она вызывается потом

SetTransfer(FieldByName('ID').AsInt eger,
FieldByName('LastName').AsString,
FieldByName('FirstName').AsString,
FieldByName('FatherName').AsString,
CurDep, fmNew.valeData.Values['Подразделение'],
CurPos, fmNew.valeData.Values['Должность']);

Вставка в таблицу о сотруднике происходит по ключам ID и EmpID

сначала строка вставлялась постоянно с ключом "0"
да и сейчас так только еще и ошибка выскакивает

Poject raised exception class EDBClient with massage"Field value required"
FIIR вне форума Ответить с цитированием
Старый 21.04.2008, 17:07   #2
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

Цитата:
Короче, в таблице сотрудников есть информация о его должности, когда меняется эта должность в таблице о трудовой деятельности должна появиться новая строка о энтом же сотруднике сотруднике но уже с другой должностью.
а зачем дублировать записи, когда можно просто значение должности изменить?
или добваить новую строку средствами SQL???
dron-s вне форума Ответить с цитированием
Старый 21.04.2008, 18:37   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
а зачем дублировать записи, когда можно просто значение должности изменить?
Я заметил
Цитата:
LaedDepFrom.Text:= OldDep;
LaedDepTo.Text:= NewDep;
Видимо, нужно хранить историю переходов служащего из отдела в отдел (и наверное - с должности на должность).
Реализованное решение, конечно, весьма корявое. Судя по всему, в одну таблицу пихается все что ни попадя.
Резонно было бы завести табличку для таких данных со структурой вроде:
Id - уникальный идентификатор записи
IdSluz - идентификатор служащего
IdOldDept - идентификатор отдела, откуда перешел
IdNowDept - идентификатор отдела, куда перешел
IdOldPos - идентификатор должности, с которой ушел
IdNowPos - идентификатор должности, на которую назначен
Понятно, что любая инфа, например список должностей, должна быть тоже определена в простейшей табличке:
IdPos - уникальный идентификатор должности
TextPos - текстовое описание должности
и так далее.
Разбивка базы на подобные структуры облегчает не только получение результатов для запросов любой сложности, но и существенно уменьшает объем самой базы.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь!!! Anil Помощь студентам 0 04.12.2007 17:32
Нужна помощь londoner Общие вопросы Delphi 2 05.02.2007 14:23