Bankir.Ru
4 декабря, воскресенье 09:12

Объявление

Свернуть
1 из 2 < >

Третья ежегодная конференция-консилиум «ИТ-бюджет банка - 2017»

Показать больше
Показать меньше

Помогите разобраться!!!

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Помогите разобраться!!!

    Дамы и господа, здравствуйте.

    При формировании "Выписки за период по счёту" в RS-Banke, макрос прекратил работу и выдал сообщение -
    "Ошибка acntrsl.mac строка 420[0]: операция Btrieve Ввод/Вывод."

    1. Может ли это быть проблемой с индексами?
    если да, то
    2. Правильно ли, воспользоваться рекомендациями из этой
    темы ?

    Заранее спасибо.
    Евгений.

  • #2
    SimpleIT
    Вы бы хотя бы написали, что там у Вас в строке 420 У меня, например, - комментарий
    Теоретически такая ошибка может быть связана в т.ч. и с упавшими индексами, тогда можете смело пользоваться своим п 2.

    Комментарий


    • #3
      2 SimpleIT:
      Для начала я порекомендовал бы, как и уважаемый vsv, посмотреть что в этой строке. Затем проверил бы настройки СУБД, а уж потом бы начал разбираться с индексами.
      А из приведенной Вами ссылки я настоятельно рекомендую воспользоваться:
      "В идеале хотелось бы, чтобы Вы описали используемое железо и СУБД...", а также версию RS-Bank и прочие полезные данные.
      Поймите, не зная версии системы, используемой СУБД и прочих данных дать ответ практически невозможно...

      Комментарий


      • #4
        vsv
        В строке дословно - " get_result = next ( fd ) ; ",
        где "fd" - файл "arhdoc.dbt";

        Всё это внутри цикла " while ( getGE(fd) ".

        Комментарий


        • #5
          SimpleIT
          В строке дословно
          Чтобы узнать, ключи это или нет, попробуйте следующее:
          1. Прочитайте arhdoc.dbt в физ. последовательности (открыв с ключем 9999, например)
          2. Прочитайте arhdoc.dbt по ключу (который исп в макросе)
          3.Сравните кол-во прочитанных записей (или же в первом случае он у Вас прочтется нормально, во втором вылетит с точно такой же ошибкой) Можно сравнить и с NRecords() Если вылет с ошибкой или кол-во записей разное - значит ключи и далее см. ту самую тему

          Комментарий


          • #6
            vsv
            Спасибо, буду пробовать.

            Комментарий


            • #7
              vsv
              Вчера попробовал все операции с butil.exe.
              1.Получил починенный файл.
              2.Выписка построилась без ошибок.

              Вот теперь думаю - не потерялись ли записи в новом файле?
              Использую, Ваш, способ проверки на "больном" файле.

              Комментарий


              • #8
                SimpleIT
                Использую, Ваш, способ проверки на "больном" файле.
                Зачем такие сложности?
                Сравните просто кол-во записей в битом файле и файле полученном после перелива

                Комментарий


                • #9
                  vsv
                  Так, простые пути не для меня.

                  А, если серьёзно -
                  количество записей одинаково - проверил.
                  НО...
                  Помогите разобраться со следующим фактом -
                  количество записей в файле прочитаном в физической последовательности и в файле прочитаном по ключу макроса, разнятся.
                  По ключу их больше.

                  Комментарий


                  • #10
                    Это в новом файле?

                    Комментарий


                    • #11
                      vsv
                      В обоих.
                      Как и говорилось, написал макрос, перебираю записи.
                      И в "больном" и в "новом" файлах, открытых по физ. последовательности, количество записей - одинаковое.
                      И в "больном" и в "новом" файлах, открытых по ключу макроса, количество записей - одинаковое.
                      НО, количество записей по физ. последовательности отличается от количества записей по ключу макроса.

                      Комментарий


                      • #12
                        Макрос - в студию!

                        Комментарий


                        • #13
                          Критикуйте....

                          file ad (arhdoc,"c:\\dop\\pp.def");
                          macro Main
                          var i=0, /* счетчик цикла */
                          get_res,
                          InitProgress(NRecords(ad));
                          get_res=getGE(ad);
                          while(get_res)
                          i=i+1;
                          UseProgress(i);
                          get_res=next(ad);
                          end;
                          RemProgress;
                          [Записей - ##########]
                          (i)
                          end;

                          /* точка входа в программу */
                          Main;

                          Комментарий


                          • #14
                            Попробуйте лучше так

                            И еще момент (просто из макроса это не понятно) Вы уверены, что он вам открывает именно те таблички, которые надо, а не один и тот же arhdoc.dbt, лежащий в Вашем DBFile (или где там у вас базы)?

                            Код:
                            file ad_f (arhdoc,"c:\\dop\\pp.def") key 9999;
                            file ad_k (arhdoc,"c:\\dop\\pp.def") key 0;
                            
                            macro ScanTable(tb)
                               var i=0; /* счетчик цикла */
                            
                               InitProgress(NRecords(ad));
                            
                               ReWind(tb);
                            
                               while(next(tb))
                                   i=i+1; 
                                  UseProgress(i);
                               end;
                              
                               RemProgress(i);
                            
                               return i;
                            end;
                            
                            macro Main 
                             array aCount(2);
                            
                             aCount(0)=ScanTable(ad_f); 
                             aCount(1)=ScanTable(ad_k); 
                            
                            [
                            F_Count:  #
                            K_Count:  #
                            
                            NRecords: #
                            ]
                            (aCount(0):l,aCount(1):l,NRecords(ad_f):l);
                            
                            end;
                            
                            /* точка входа в программу */
                            Main();

                            Комментарий


                            • #15
                              vsv
                              Разобрался вроде со всем.
                              Пару ошибок у себя нашёл.
                              И "больной" и "новый" файлы имеют одинаковое количество записей.

                              Только "больной" не "ругался", при работе макроса...
                              И так его посчитали, и так.

                              Комментарий


                              • #16
                                SimpleIT
                                Вы уверены что он там у Вас по ключу #0 (как у Вас в макросе)?
                                Там, в acntrsl.mac, если Вы посмотрите, есть всякие там вызовы KeyNum(), которые собственно меняют актуальный ключ Может он у Вас и посыпался

                                Комментарий


                                • #17
                                  SimpleIT
                                  Хотя если записей в старом и новом файле одинаковое кол-во, то собственно Вы проблему решили и можно не беспокоится Ура

                                  Комментарий


                                  • #18
                                    vsv
                                    Спасибо за "...всякие там вызовы KeyNum()...".
                                    Пойду искать. В первом приближении их не много.

                                    Комментарий


                                    • #19
                                      vsv
                                      Нашёл таки ключ, на котором слетало всё.

                                      Всё работает.

                                      СПАСИБО.

                                      Комментарий


                                      • #20
                                        SimpleIT
                                        Рад был помочь

                                        Комментарий

                                        Пользователи, просматривающие эту тему

                                        Свернуть

                                        Присутствует 1. Участников: 0, гостей: 1.

                                        Обработка...
                                        X