Ошибка создания файла xbase 1с

Обновлено: 07.07.2024

Внимание!

При работе с файлами DBF следует помнить, что имя файла должно удовлетворять ограничению 8.3.

Внимание!

Объект xBase доступен как на стороне клиента, так и на стороне сервера. Следует продумывать клиент-серверное взаимодействие при решении каждой конкретной задачи.

Чтение файла DBF

Чтение данных из файла DBF производится за несколько последовательных этапов:

  1. Создание объекта XBase;
  2. Открытие файла;
  3. Последовательный перебор всех строк файла и считывание значений полей;
  4. Закрытие файла.

Рассмотрим этот процесс на примере:

Можно использовать несколько измененный алгоритм перебора строк файла:

Выгрузка в файл DBF

Этапы выгрузки в файл DBF:

  1. Создание объекта XBase;
  2. Указание кодировки (если не указать, то будет использоваться кодировка ANSI);
  3. Описание полей;
  4. Создание файла;
  5. Цикл с добавлением и заполнением строк;
  6. Закрытие файла.

Рассмотрим этот процесс на примере:

При указании кодировки используется тип КодировкаXBase , который может принимать два значения:

Добавление нового поля при описании структуры имеет синтаксис

Доступны следующие типы:

Работа с индексами

Совместно с файлом DBF может использоваться индексный файл, в котором может содержаться информация об одном или более индексе. Наличие индексов делает возможным использование поиска, а не только последовательного перебора всех строк файла.

При создании индексного файла следует задать:

  • Перечень индексов;
  • Путь сохранения индексного файла (на этапе 4 выгрузки).

Пример создания индексного файла:

Процедура добавления нового индекса имеет синтаксис:

Для использования индексов при чтении из файла DBF следует:

  • Указать путь к индексному файлу (на этапе 2 загрузки);
  • Задать текущий индекс.

Пример открытия файла DBF с использованием индексного файла:

Внимание!

При открытии файла DBF позиционирование происходит на первой записи в файле. Первая запись в файле не соответствует первой записи в индексе. В связи с этим при использовании индексов перед тем, как последовательно обходить строки, необходимо спозиционироваться на первой строке индекса. Это можно сделать методом Первая () , например:

Для поиска может использоваться одна из двух функций:

  • Найти (< Ключ >, < Режим >) ;
  • НайтиПоКлючу (< Режим >) .

В результате работы обоих функций возвращается значение с типом булево (найдена запись с указанными условиями или нет). В случае успешного поиска текущий указатель устанавливается на найденной строке. В качестве режима поиска может использоваться одно из значений:

Рассмотрим поиск в файле DBF на примерах:

Удаление записей в файле DBF

Удаление записи производится методом Удалить () :

Но при использовании этого метода запись не удаляется из файла безвозвратно, ей присваивается пометка удаления. При переборе строк помеченные на удаление записи пропускаются. Если необходимо обойти весь файл, включая помеченные на удаление записи, необходимо присвоить значение Истина свойству ОтображатьУдаленные объекта xBase. Узнать помечена запись на удаление или нет можно с помощью функции ЗаписьУдалена () . Для снятия пометки удаления используется метод Восстановить () .

Для непосредственного удаления помеченных записей используется метод Сжать () :

Если необходимо удалить все записи в файле непосредственно, то можно использовать метод ОчиститьФайл () :

Загрузка из DBF при помощи ADO

Для работы с файлами DBF может использоваться технология ADO. Драйверы ADO входят в состав операционной системы Windows и дополнительно их устанавливать не надо.

Рассмотрим пример кода для чтения из файла DBF по технологии ADO:

  • Provider – это используемый драйвер;
  • Data Source – путь, где находится файл DBF. Путь указывается с точностью до каталога. Имя файла используется в качестве имени таблицы в запросах;
  • Extended Properties – в случае обращения к файлам DBF является обязательным параметром. Можно указать формат файла

Внимание!

Остались вопросы?
Спросите в комментариях к статье.

Метод записать просто игнорируется, без всяких ошибок. Просто не пишет и все! В чем может быть проблема?

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Проблема с записью реквизитов формы
Здравствуйте. Вот возник такой вопрос: есть документ, в котором присутствует группа радиокнопок.

Xbase (v 7.7)
Создаю объект следующим способом &quot;ДБФ_дикт = СоздатьОбъект(&quot;XBase&quot;);&quot; Путь к файлу выбираю.

Xbase (v 7.7) по сети
Когда отрываю файл на локальной машине, все работает нормально, но вот когда нужные файл расположен.

Проблема с записью в бд
Есть запрос, $quer = mysql_query(&quot;SELECT * FROM $userstable&quot;); $nu = mysql_num_rows($quer); .

возможно имя файла длинное, кажется должно быть не более 5 символов

К сожалению и с коротким именем не прокатило. Проблема в чем то другом.

текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config \acc.cdx");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
текБаза.Записать();
сч=сч+1;
КонецЦикла;

Создает только одну запись, остальные молча игнорирует!

текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config \acc.cdx");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
сч=сч+1;
КонецЦикла;
текБаза.Записать();

а так сколько сделает?

текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config \acc.cdx"); тоже 1 запись, только последнюю. Насчет размера файла пока не знаю, вполне может быть и два гига, если получится записать больше 1 строки :huh: //надо так
ока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
сч=сч+1;
текБаза.Записать();
КонецЦикла;
текБаза.Записать();

текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
текБаза.Записать();
сч=сч+1;
КонецЦикла;

а ежли вот так, без индекса? Мож надо использовать Переиндексировать() перез записью?

Прикольно, без индекса кажется записал. Это что ж после добавления каждой записи надо переиндексировать. В перспективе то задача состоит в том, чтобы открыть базу, попробовать найти запись (тут без индекса как я понимаю никак?) и если такой записи нет, то добавить. А если надо добавить 10 записей, то надо 10 раз переиндексировать. Я обычно искал запись ДБФ через перебор строк.
Насчет индексов глянь ДобавитьИндекс()
СоздатьИндексныйФайл() Индексный файл создает, тут все нормально. Проблема, если открывать потом с этим файлом - тогда не пишет. А если без него - то пишет. А запустить поиск по базе без открытия индексного файла я ведь не смогу? Найти(), НайтиПоКлючу(). И там и там должен выставляться текущий индекс.

Ключ там как атрибут. Походу надо наверно так

текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config \acc.cdx");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
ТекБаза.Ключ = сч;// хотя там в добавить индекс написано, что должно соответствовать параметрам ДБФ, индекс по другому выглядит.
текБаза.Записать();
сч=сч+1;
КонецЦикла;

не понял? В добавить() про ключ ничего не сказано. он используется при поиске, а не доавлении.

Пардон - это я ошибся. На семерке вот такой код работает;

Процедура Сформировать()
текБаза = СоздатьОбъект("XBASE");// у тебя текБаза = Новый XBase();
Если ТекБаза.Открыта() = 1 Тогда
ТекБаза.ЗакрытьФайл();
КонецЕсли;
ТекБаза.ДобавитьПоле("GLN",1,15,2);

ТекБаза.ДобавитьИндекс("ID","GLN",1,0,);
текБаза.СоздатьФайл(КаталогИБ() +"\acc.dbf",КаталогИБ()+"\acc.cdx");
Если ТекБаза.Открыта() = 0 Тогда
текБаза.ОткрытьФайл(КаталогИБ() +"\acc.dbf",КаталогИБ()+"\acc.cdx");
КонецЕсли;

сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
текБаза.Записать();
сч=сч+1;
КонецЦикла;

Проблема с записью
Всем привет, есть микрофон bm-800 с фантомным питанием и внешней звуковухой. Есть трудности при.

Проблема с записью в файл
Коллеги, подскажите в чем проблема. Вот скрипт,для записи данных в файл. В результате его роботы.

Проблема с записью в файл
Не умею работать с выводом в файл в С++, как сделать чтобы записывало результат в txt, это.

Читайте также: