Вход | Регистрация

1С:Предприятие ::

Метки:Обмен данными и УРБД

Слетает индекс у dbf - файла (открытого через объект XBASE)

Я
   {}
23.06.04 - 16:37
Вообщем то в ЖКК предепредили, что для хранения данных объект XBASE не предназначен, только для разовых операций импорта/экспорта.
Тем не менее, тыпаюсь работать с внешним dnf файлом. Читать, записывать, удалять.
Работаю только с одним индесом. Просмотрел внимательно код , вроде все корректно. Везде использую один индекс, везде закрываю файл.
Но в какой то момент индекс слетает0 записи не находятся, хотя они там есть. Делаю переиндексацию - ок.
Кто сталкивался ? Как обойти?
 
  Рекламное место пустует
   {}
1 - 24.06.04 - 08:59
Видимо только у меня такие косяки выплыли при интенсивной работе с объектом XBASE. Значит где, что то не учел. Кстати, если кто вруг заглянет в ветку, то релиз 20.
   Valery
 
2 - 24.06.04 - 09:07
По прошлому опыту foxpro, такая ситуация встречалась только когда забывал подключать индекс. Здесь аналогично. Других вариантов не помню.
   {}
3 - 24.06.04 - 09:12
Valery, как определить сбился ли индес?
Конечно можно при создании dbf- файла записывать фиктивную проверочную запись, потом ее искать, если не нашли, то - переиндесация. Криво как то.
   lift
 
4 - 24.06.04 - 10:00
Так это же поганый DBF, индексы будут валиться всегда!!! На входе переиндексация, на выходе тоже, и вроде ничего более умного придумать не возможно.
   kаdr
5 - 24.06.04 - 10:04
(4) Ага, особенно хорош этот метод при размере базы в несколько сотен МБ
   Valery
 
6 - 24.06.04 - 10:32
(3)Не это ерунда. Так не должно быть. Посмотри в отладчике. Ставь точку останова на операциях записи в ДБФ, и смотри какой индекс в данный момент активный.
Начни с этого. С ДБф в 1С часто работаю, с таким не сталкивался. На крайний случай можно обойти это используя переиндексацию перед поиском.
   {}
7 - 24.06.04 - 12:51
Valery, запись в файл идет только в одной процедуре, код следующий
Файл.ОткрытьФайл(ВнешнийФайл, ВнешнийИндекс, 0);
Если Файл.Открыта() = 1 тогда
   Файл.АвтоСохранение(0);
   Файл.КодоваяСтраница(0);
   Файл.ТекущийИндекс("IDXNUM");
   Если Файл.Найти(Конт.НомерДок) = 0 Тогда
      Файл.Добавить();
      Файл.УстановитьЗначениеПоля("NUMDOC",Конт.НомерДок);
      ....
      Файл.Записать(); 
   КонецЕсли;
Файл.ЗакрытьФайл();
КонецЕсли;
Может что в коде? В др. процедурах только чтение.
   Valery
 
8 - 24.06.04 - 13:14
Я не пользуюсь "УстановитьЗначениеПоля" если структура тебе известна.
Попробуй так
Файл.NUMDOC=Конт.НомерДок;


Список тем форума
Рекламное место пустует  
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует