Обсуждение:Восстановление целостности файлов Pervasiv

0 (0)
  • Развернуть Обсуждение:Восстановление целостности файлов Pervasiv ( Обсуждение примера  05.04.2013 18:26 )
    0(0)
    Макрос позволяет восстановить только целые записи из dbt файла пропуская ошибочные записи, почему то за 15 лет существования RSBank наделана куча утилит по восстановлению,
    но все они работают по принципу целые записи от начала файла + целые записи от конца файла, а если ошибок несколько то все что было между ошибками просто теряем.
    PS:Вот я и решил исправить это досадное недоразумение, хотелось бы чтобы утилиты восстановления были встроены в АБС и не приходилось в мыле срочно искать пути выхода в экстренных случаях.
    Посмотреть пример
    >> Ответить
    • Развернуть Ерунда какая-то (+) ( sokols  08.04.2013 14:17 )
      2(1)
      var lastp=0;            
      
      ...
      
      macro Read
            var inf=TBFile(RepairBase,"R",-1,SrcPath + RepairBase          , RepairDef);
      
            macro Add     
      ...
            end;   
       
            if (maxcount==0) maxcount=NRecords(inf); InitProgress(maxcount,"","Восстановление базы"); end;
      
      lastp инициализировано нулём, поэтому в следующую ветку управление не попадёт никогда
            if (lastp!=0)
            while (inf.GetDirect(lastp)==false) 
                  Add();
                  lastp=lastp+1; 
                  message(lastp);
            end;         
            end;
      
      
            while (inf.next() )    
      вот внутри этого цикла всё и будет крутиться
                  Add();
                  lastp=inf.GetPos();
            end;               
                    
      ...
          
            OnError(); 
              lastp=lastp+1; 
              println("error in position ",lastp);
              message(lastp);
              return; 
      end;
      
      CreateNew();
      
      while (1)
            Read();
      end;
      
      Стало быть, весь макрос - это последовательный проход по испорченному файлу и переписывание его записей во вновь созданный. Такая технология ничего не даёт. Во-первых, если файл испорчен, то макрос на какой-то записи и отвалится. Во-вторых, если ключ, по которому пробегаем файл, имеет один из флагов - Null value или Manual, то при определённых значениях некоторые записи не скопируются.

      butil - наше всё :-)
      >> Ответить
      • Развернуть Открой глаза и включи голову. ( LeonL  10.04.2013 12:20 )
        0(0)
        Во первых если файл испорчен то он отвалится на испорченной записи и попадет в OnError который установит номер следующей записи,
        и While(1) переоткроет файл уже с целой записи.
        Во вторых открой глаза inf=TBFile( -1 ) открыть файл БЕЗ КЛЮЧА ПО ФИЗИЧЕСКОЙ ПОЗИЦИИ.
        В третьих бутил работает только до первой и последней ошибки средины нет.

        И последнее если ты не понял логики, сначала спроси потом высказывай свое эКСПЕРТНОЕ мнение.
        И самое последнее ты что реально думаешь что человек бы выложил неработающий макрос? я уже его дважды использовал на рухнувших базах борум, и оба раза
        он отработал на 100% потери составили 2 и 1 запись, а штатный бутил предлагал мне отрезать 60 и 20 тысяч записей.
        >> Ответить