root/trunk/Forms/frm_main.pas
| 425 | 434 | ||
|---|---|---|---|
820 | unit_SearchUtils, | 820 | unit_SearchUtils, |
821 | frm_search, | 821 | frm_search, |
822 | unit_WriteFb2Info, | 822 | unit_WriteFb2Info, |
823 | frm_ConverToFBD; | 823 | frm_ConverToFBD, |
824 | frmEditAuthorEx; | ||
824 | 825 | ||
825 | resourcestring | 826 | resourcestring |
826 | rstrFileNotFoundMsg = 'Файл %s не найден!'#13'Проверьте настройки коллекции!'; | 827 | rstrFileNotFoundMsg = 'Файл %s не найден!'#13'Проверьте настройки коллекции!'; |
... | ... | ||
4550 | old_AiD: integer; | 4551 | old_AiD: integer; |
4551 | new_AiD: integer; | 4552 | new_AiD: integer; |
4552 | 4553 | ||
4554 | frmEditAuthor: TfrmEditAuthorDataEx; | ||
4553 | begin | 4555 | begin |
4554 | if ActiveView = FavoritesView then | 4556 | if ActiveView = FavoritesView then |
4555 | begin | 4557 | begin |
... | ... | ||
4571 | dmCollection.tblAuthors.Locate('A_ID', dmCollection.tblAuthor_List['AL_AuthID'], []); | 4573 | dmCollection.tblAuthors.Locate('A_ID', dmCollection.tblAuthor_List['AL_AuthID'], []); |
4572 | old_AiD := dmCollection.tblAuthor_List['AL_AuthID']; | 4574 | old_AiD := dmCollection.tblAuthor_List['AL_AuthID']; |
4573 | 4575 | ||
4574 | frmEditAuthorData.edFamily.Text := dmCollection.tblAuthors.FieldByName('A_Family').AsString; | 4576 | frmEditAuthor := TfrmEditAuthorDataEx.Create(Self); |
4575 | frmEditAuthorData.edName.Text := dmCollection.tblAuthors.FieldByName('A_Name').AsString; | 4577 | try |
4576 | frmEditAuthorData.edMiddle.Text := dmCollection.tblAuthors.FieldByName('A_Middle').AsString; | 4578 | frmEditAuthor.LastName := dmCollection.tblAuthors.FieldByName('A_Family').AsString; |
4579 | frmEditAuthor.FirstName := dmCollection.tblAuthors.FieldByName('A_Name').AsString; | ||
4580 | frmEditAuthor.MidName := dmCollection.tblAuthors.FieldByName('A_Middle').AsString; | ||
4577 | 4581 | ||
4578 | frmEditAuthorData.ShowCheckBoxes := True; | 4582 | if frmEditAuthor.ShowModal = mrOk then |
4583 | begin | ||
4584 | S := Trim(AnsiUpperCase(frmEditAuthor.LastName + ' ' + | ||
4585 | frmEditAuthor.FirstName + ' ' + | ||
4586 | frmEditAuthor.MidName)); | ||
4579 | 4587 | ||
4580 | if frmEditAuthorData.ShowModal = mrOk then | 4588 | if (not frmEditAuthor.AddNew) and (not frmEditAuthor.SaveLinks) then |
4581 | begin | 4589 | begin |
4590 | // меняем только данные об авторе, все ссылки остаются на месте
if dmCollection.tblAuthors.Locate( | ||
4591 | 'A_Family;A_Name;A_Middle', | ||
4592 | VarArrayOf([frmEditAuthor.LastName, frmEditAuthor.FirstName, frmEditAuthor.MidName]), | ||
4593 | [loCaseInsensitive] | ||
4594 | ) | ||
4595 | then | ||
4596 | begin | ||
4597 | // если новый автор уже есть, меняем сслыки на него (объединение) | ||
4598 | new_AiD := dmCollection.tblAuthorsID.Value; | ||
4599 | repeat | ||
4600 | // меняем старые Id на новые
{ TODO -oNickR -cRefactoring : можно заменить на один UPDATE } | ||
4601 | dmCollection.tblAuthor_List.MasterSource := nil; | ||
4582 | 4602 | ||
4583 | S := trim(AnsiUpperCase(frmEditAuthorData.edFamily.Text + ' ' + | 4603 | Res := dmCollection.tblAuthor_List.Locate('AL_AuthID',old_Aid,[]); |
4584 | frmEditAuthorData.edName.Text + ' ' + | 4604 | if Res then |
4585 | frmEditAuthorData.edMiddle.Text)); | 4605 | begin |
4606 | dmCollection.tblAuthor_List.Edit; | ||
4607 | dmCollection.tblAuthor_ListAL_AuthID.Value := new_AiD; | ||
4608 | dmCollection.tblAuthor_List.Post; | ||
4609 | end; | ||
4610 | until not Res; | ||
4586 | 4611 | ||
4587 | if (not frmEditAuthorData.AddNew) and (not frmEditAuthorData.SaveLinks) then | 4612 | repeat |
4588 | begin // меняем только данные об авторе, все ссылки остаются на месте
| 4613 | Res := dmCollection.tblBooks.Locate('FullName', AnsiUpperCase(Data.FullName), [loCaseInsensitive]); |
4589 | if dmCollection.tblAuthors.Locate('A_Family;A_Name;A_Middle', | 4614 | if Res then |
4590 | VarArrayOf([frmEditAuthorData.edFamily.Text, | 4615 | begin |
4591 | frmEditAuthorData.edName.Text, | 4616 | dmCollection.tblBooks.Edit; |
4592 | frmEditAuthorData.edMiddle.Text]), | 4617 | dmCollection.tblBooksFullName.Value := S; |
4593 | [loCaseInsensitive]) then | 4618 | dmCollection.tblBooks.Post; |
4594 | begin // если новый автор уже есть, меняем сслыки на него (объединение) | 4619 | end; |
4595 | new_AiD := dmCollection.tblAuthorsID.Value; | 4620 | until not Res; |
4596 | repeat | ||
4597 | // меняем старые Id на новые
// обновляем индексное поле
{ TODO -oNickR -cRefactoring : можно заменить на один UPDATE } | ||
4598 | dmCollection.tblAuthor_List.MasterSource := nil; | ||
4599 | 4621 | ||
4600 | Res := dmCollection.tblAuthor_List.Locate('AL_AuthID',old_Aid,[]); | 4622 | // старого автора удаляем
|
4601 | if Res then | 4623 | if dmCollection.tblAuthors.Locate('A_ID', old_Aid,[]) then |
4602 | begin | 4624 | dmCollection.tblAuthors.Delete; |
4603 | dmCollection.tblAuthor_List.Edit; | ||
4604 | dmCollection.tblAuthor_ListAL_AuthID.Value := new_AiD; | ||
4605 | dmCollection.tblAuthor_List.Post; | ||
4606 | end; | ||
4607 | until not Res; | ||
4608 | 4625 | ||
4609 | // обновляем индексное поле
{ TODO -oNickR -cRefactoring : можно заменить на один UPDATE } | 4626 | dmCollection.tblAuthor_List.MasterSource := dmCollection.dsAuthors; |
4627 | end // if Locate | ||
4628 | else // если нет - просто редактируем ФИО
| ||
4629 | begin | ||
4630 | dmCollection.tblAuthors.Edit; | ||
4631 | dmCollection.tblAuthorsFamily.Value := frmEditAuthor.LastName; | ||
4632 | dmCollection.tblAuthorsName.Value := frmEditAuthor.FirstName; | ||
4633 | dmCollection.tblAuthorsMiddle.Value := frmEditAuthor.MidName; | ||
4634 | dmCollection.tblAuthors.Post; | ||
4635 | end; | ||
4636 | |||
4610 | repeat | 4637 | repeat |
4638 | { TODO -oNickR -cRefactoring : можно заменить на один UPDATE } | ||
4611 | Res := dmCollection.tblBooks.Locate('FullName', AnsiUpperCase(Data.FullName), [loCaseInsensitive]); | 4639 | Res := dmCollection.tblBooks.Locate('FullName', AnsiUpperCase(Data.FullName), [loCaseInsensitive]); |
4612 | if Res then | 4640 | if Res then |
4613 | begin | 4641 | begin |
... | ... | ||
4619 | dmCollection.tblBooks.Post; | 4648 | dmCollection.tblBooks.Post; |
4620 | end; | 4649 | end; |
4621 | until not Res; | 4650 | until not Res; |
4622 | |||
4623 | if dmCollection.tblAuthors.Locate('A_ID', old_Aid,[]) then | ||
4624 | dmCollection.tblAuthors.Delete; // старого автора удаляем
| ||
4625 | dmCollection.tblAuthor_List.MasterSource := dmCollection.dsAuthors; | ||
4626 | end // if Locate | ||
4627 | else // если нет - просто редактируем ФИО
| ||
4628 | begin | ||
4629 | dmCollection.tblAuthors.Edit; | ||
4630 | dmCollection.tblAuthorsFamily.Value := frmEditAuthorData.edFamily.Text; | ||
4631 | dmCollection.tblAuthorsName.Value := frmEditAuthorData.edName.Text; | ||
4632 | dmCollection.tblAuthorsMiddle.Value := frmEditAuthorData.edMiddle.Text; | ||
4633 | dmCollection.tblAuthors.Post; | ||
4634 | end; | 4651 | end; |
4635 | 4652 | ||
4636 | repeat | 4653 | if (frmEditAuthor.AddNew) then |
4637 | { TODO -oNickR -cRefactoring : можно заменить на один UPDATE } | 4654 | begin // заменяем автора на нового |
4638 | Res := dmCollection.tblBooks.Locate('FullName', AnsiUpperCase(Data.FullName), [loCaseInsensitive]); | 4655 | // добавляем нового автора |
4639 | if Res then | 4656 | if not dmCollection.tblAuthors.Locate( |
4657 | 'A_Family;A_Name;A_Middle', | ||
4658 | VarArrayOf([frmEditAuthor.LastName, frmEditAuthor.FirstName, frmEditAuthor.MidName]), | ||
4659 | [loCaseInsensitive] | ||
4660 | ) | ||
4661 | then | ||
4640 | begin | 4662 | begin |
4641 | dmCollection.tblBooks.Edit; | 4663 | dmCollection.tblAuthors.Insert; |
4642 | dmCollection.tblBooksFullName.Value := S; | 4664 | dmCollection.tblAuthorsFamily.Value := frmEditAuthor.LastName; |
4643 | dmCollection.tblBooks.Post; | 4665 | dmCollection.tblAuthorsName.Value := frmEditAuthor.FirstName; |
4666 | dmCollection.tblAuthorsMiddle.Value := frmEditAuthor.MidName; | ||
4667 | dmCollection.tblAuthors.Post; | ||
4644 | end; | 4668 | end; |
4645 | until not Res; | ||
4646 | end; | ||
4647 | 4669 | ||
4648 | if (frmEditAuthorData.AddNew) then | 4670 | // меняем ссылки
|
4649 | begin // заменяем автора на нового | 4671 | dmCollection.tblAuthor_List.MasterSource := nil; |
4650 | 4672 | ||
4651 | // добавляем нового автора | 4673 | Node := Tree.GetFirst; |
4652 | if not dmCollection.tblAuthors.Locate('A_Family;A_Name;A_Middle', | 4674 | while Node <> Nil do |
4653 | VarArrayOf([frmEditAuthorData.edFamily.Text, | ||
4654 | frmEditAuthorData.edName.Text, | ||
4655 | frmEditAuthorData.edMiddle.Text]), | ||
4656 | [loCaseInsensitive]) then | ||
4657 | begin | ||
4658 | dmCollection.tblAuthors.Insert; | ||
4659 | dmCollection.tblAuthorsFamily.Value := frmEditAuthorData.edFamily.Text; | ||
4660 | dmCollection.tblAuthorsName.Value := frmEditAuthorData.edName.Text; | ||
4661 | dmCollection.tblAuthorsMiddle.Value := frmEditAuthorData.edMiddle.Text; | ||
4662 | dmCollection.tblAuthors.Post; | ||
4663 | end; | ||
4664 | |||
4665 | // меняем ссылки
| ||
4666 | dmCollection.tblAuthor_List.MasterSource := nil; | ||
4667 | |||
4668 | Node := Tree.GetFirst; | ||
4669 | while Node <> Nil do | ||
4670 | begin | ||
4671 | Data := Tree.GetNodeData(Node); | ||
4672 | if (Data.nodeType = ntBookInfo) and | ||
4673 | ((Tree.CheckState[Node] = csCheckedNormal) or | ||
4674 | (Tree.Selected[Node])) then | ||
4675 | begin | 4675 | begin |
4676 | if not frmEditAuthorData.SaveLinks then // заменяем ссылки
| 4676 | Data := Tree.GetNodeData(Node); |
4677 | if (Data.nodeType = ntBookInfo) and | ||
4678 | ((Tree.CheckState[Node] = csCheckedNormal) or | ||
4679 | (Tree.Selected[Node])) then | ||
4677 | begin | 4680 | begin |
4678 | if dmCollection.tblAuthor_List.Locate('AL_BookID',Data.ID,[]) then | 4681 | if not frmEditAuthor.SaveLinks then // заменяем ссылки
|
4679 | begin | 4682 | begin |
4680 | dmCollection.tblAuthor_List.Edit; | 4683 | if dmCollection.tblAuthor_List.Locate('AL_BookID',Data.ID,[]) then |
4684 | begin | ||
4685 | dmCollection.tblAuthor_List.Edit; | ||
4686 | dmCollection.tblAuthor_ListAL_AuthID.Value := dmCollection.tblAuthorsID.Value; | ||
4687 | dmCollection.tblAuthor_List.Post; | ||
4688 | end | ||
4689 | end | ||
4690 | else | ||
4691 | begin // добавляем второго автора | ||
4692 | dmCollection.tblAuthor_List.Insert; | ||
4681 | dmCollection.tblAuthor_ListAL_AuthID.Value := dmCollection.tblAuthorsID.Value; | 4693 | dmCollection.tblAuthor_ListAL_AuthID.Value := dmCollection.tblAuthorsID.Value; |
4682 | dmCollection.tblAuthor_List.Post; | 4694 | dmCollection.tblAuthor_ListAL_BookID.Value := Data.ID; |
4683 | end | ||
4684 | end | ||
4685 | else | ||
4686 | begin // добавляем второго автора | ||
4687 | dmCollection.tblAuthor_List.Insert; | ||
4688 | dmCollection.tblAuthor_ListAL_AuthID.Value := dmCollection.tblAuthorsID.Value; | ||
4689 | dmCollection.tblAuthor_ListAL_BookID.Value := Data.ID; | ||
4690 | 4695 | ||
4691 | dmCollection.tblAuthor_ListAL_Series.Value := Copy(Data.Series, 1, IndexSize); | 4696 | dmCollection.tblAuthor_ListAL_Series.Value := Copy(Data.Series, 1, IndexSize); |
4692 | dmCollection.tblAuthor_ListAL_Title.Value := Copy(Data.Title, 1, IndexSize); | 4697 | dmCollection.tblAuthor_ListAL_Title.Value := Copy(Data.Title, 1, IndexSize); |
4693 | 4698 | ||
4694 | dmCollection.tblAuthor_List.Post; | 4699 | dmCollection.tblAuthor_List.Post; |
4700 | end; | ||
4701 | dmCollection.tblBooks.Locate('ID', Data.ID, []); | ||
4702 | dmCollection.tblBooks.Edit; | ||
4703 | dmCollection.tblBooksFullName.Value:= S; | ||
4704 | dmCollection.tblBooks.Post; | ||
4695 | end; | 4705 | end; |
4696 | dmCollection.tblBooks.Locate('ID', Data.ID, []); | 4706 | Node := Tree.GetNext(Node,False); |
4697 | dmCollection.tblBooks.Edit; | ||
4698 | dmCollection.tblBooksFullName.Value:= S; | ||
4699 | dmCollection.tblBooks.Post; | ||
4700 | end; | 4707 | end; |
4701 | Node := Tree.GetNext(Node,False); | 4708 | dmCollection.tblAuthor_List.MasterSource := dmCollection.dsAuthors; |
4702 | end; | 4709 | end; |
4703 | dmCollection.tblAuthor_List.MasterSource := dmCollection.dsAuthors; | 4710 | InitCollection(True); |
4704 | end; | 4711 | end; |
4705 | InitCollection(True); | 4712 | finally |
4713 | frmEditAuthor.Free; | ||
4706 | end; | 4714 | end; |
4707 | end; | 4715 | end; |
4708 | 4716 |
Download diff