root/trunk/Forms/frm_main.pas

425434
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