Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   ДБФ с Индексами из 8 в 7 (http://forums.kuban.ru/f1040/dbf_s_indeksami_iz_8_v_7_a-3032071.html)

мыша1с 06.09.2012 18:06

ДБФ с Индексами из 8 в 7
 
Решила вот обратиться к коллективному мозгу. в 8-ке создаю дбф файл с индексами, записываю в него данные. В 7-ке открываю этот файл и он не находит значение по индексу (в 8-ке сделала проверку, вроде находит).
Ниже приведен код, может где что-то забыла.
=====выгрузка из 8-ки
БД = Новый XBase;
БД.Поля.Добавить("CODE", "N", 10,0);
БД.Поля.Добавить("OST", "N", 19,7);

БД.СоздатьФайл(Путь + "ost.dbf", Путь + "ost.cdx");
БД.Индексы.Добавить("IDXCODE", "CODE");
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "ost.cdx");
БД.АвтоСохранение = Истина;

//**тут типо запрос
Пока Выборка.Следующий() Цикл
БД.Добавить();
БД.CODE = Выборка.Код;
БД.OST = Выборка.КоличествоОстаток;
КонецЦикла;
БД.ЗакрытьФайл();

=====в 7-ке
База = СоздатьОбъект("XBase");
База.ОткрытьФайл(Путь+"OST.DBF",Путь+"OST.CDX",1);
База.ТекущийИндекс("IDXCODE");
Сообщить(База.Найти(691,0));

////
В 8-ке код 691 находиться, в 7-ке нет.

Блондинка в шок 06.09.2012 18:59

а почему бы в 7.7 не создавать свой индекс?

DeiMos 06.09.2012 19:45

1) "находитЬся" - Не сочтите за розжиг, но мне реально непонятно, почему все, кто получал среднее образование в РФ так пишут?

"приЙшёл", "приЙдётся" ет цетера...
Реально аццки выносит мосх иностранцам всем...
Россияне, вы свои мессиджи в спелл-чекере проверяйте, что-ли?

2) По поводу индексов, ИМХО, - тут тяжкая проблема стандартов DBaseII и DBaseIV. И Блондинка, скорее всего, права.

Однако, чтобы проверить правы мы с Блондинкой или нет - создай этот ДБФ с индексами в 7.7 - и попробуй считать его из 7.7.

Ткачик 06.09.2012 20:05

(0) Миссис Маус?!

DeiMos 06.09.2012 20:14

3-Ткачик > Онжелина Шо-ли и Томми Хрусь-хрусть.

мыша1с 06.09.2012 20:40

*стыдно* как к уже созданой дбф создать индексный файл в 7-ке
3-Ткачик >нет

DeiMos 06.09.2012 20:45

5-мыша1с > Средствами любой СУБД.
FoxBase, Clipper, FoxPro.

мыша1с 06.09.2012 20:56

Возможно ли в 7-ке создать индексный файл к уже существующему дбф? Без подключение внешних компонент? ЖК не предлагать, мои глазки там не увидели метода.

DeiMos 06.09.2012 20:57

7-мыша1с > Легко!
Читай (6).

VZ 06.09.2012 20:57

Не надо сохранять индексный файл. Просто в модуль инициализации файла запсочить индексирование. Сия процедура достаточно быстрая, и проблем не доставит.
А надежность - добавит.
Кроме того, в техпроцессе один файл - это лучше, чем два ;)

VZ 06.09.2012 20:59

8-DeiMos > Лучше добавлять cdx средством под названием 1Cv7.exe. Проверено.

мыша1с 06.09.2012 21:05

9-VZ >милый, милый ВЗ. КАк?

VZ 06.09.2012 21:14

Сказанное в (10) относится к файлам, созданным в 1С. Но эти файлы [u][b]не годятся для FoxPro[/b][/u] (и утилам на его основе, вроде поделок БухСофта)!
Но сами файлы прелестно очищаются, записываются, и читаются, естественно. Главное, не обращаться к полям типа MEMO. В том числе и косвенно (например, нельзя читать список полей). CDX использовать можно (MEMO-поля не индексируются.

VZ 06.09.2012 21:15

11-мыша1с > Щаз, покопаюсь в завалах, может, найду образец...

sinegurochka 06.09.2012 21:20

11-мыша1с > [url]http://bugalt.narod.ru/dbf.htm[/url]

мыша1с 06.09.2012 21:23

14-Синегурочка >ключевое слово к существующему.
ДобавитьИндекс - Метод можно использовать только перед созданием новой базы.

sinegurochka 06.09.2012 21:31

15-мыша1с > открыть файл, добавить индекс и пересоздать файл уже с индексом?

DeiMos 06.09.2012 21:35

16-Синегурочка > Бредишь? Передозировка селёдки?

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

мыша1с 06.09.2012 21:41

16- ну в общем думаю способ один: открывать файл, перечитывать полностью и записывать в новый с индексами. Просто жду кто подскажет способ легче. Этот мне видно с первого ответа.

Ткачик 06.09.2012 21:42

(15) Глядишь, я успею раньше [b]VZ[/b]?

ФайлDBF=СоздатьОбъект("XBase");
ФайлDBF.ОткрытьФайл("ost.dbf",,0);
Если ФайлDBF.Открыта()=0 Тогда
Предупреждение("Не удается открыть файл ost.dbf!",60);
Возврат;
КонецЕсли;
ФайлDBF.ДобавитьИндекс("IDXCODE","CODE",0,0,"");
ФайлDBF.СоздатьИндексныйФайл("ost.cdx");
ФайлDBF.ТекущийИндекс("IDXCODE");


Где-то так, на основе [u]работающего[/u] кода.

(16), (17) Теоретики...

VZ 06.09.2012 21:44

Пример 1:

//Инициализация ДБФ
ФС.УдалитьФайл(СтрЗаменить(СокрЛП(ПутьКБазе)+ИмяФайлаУИД,"DBF","CDX"));
фУИД = СоздатьОбъект("XBASE");
фУИД.ОткрытьФайл(СокрЛП(ПутьКБазе)+ИмяФайлаУИД);
фУИД.Сжать();
фУИД.ДобавитьИндекс("UID","UID",1,0,".NOT.Deleted()");
фУИД.СоздатьИндексныйФайл(СтрЗаменить(СокрЛП(ПутьКБазе)+ИмяФайлаУИД,"DBF","CDX"));
фУИД.Переиндексировать();
фУИД.ТекущийИндекс("UID");
фУИД.АвтоСохранение(0);
..........................................
//Закрытие файлов
фУИД.ЗакрытьФайл();

Пример 2.
фУИД = СоздатьОбъект("XBASE");
Если ФС.СуществуетФайл(СокрЛП(Каталог)+ИмяФайлаУИД) = 0 Тогда
фУИД.ДобавитьПоле("ID7","S",24,);
фУИД.ДобавитьПоле("NAME7","S",128,);
фУИД.ДобавитьПоле("MARK","S",1,);
фУИД.ДобавитьПоле("UID","S",36,);
фУИД.ДобавитьПоле("NAME8","S",128,);
фУИД.ДобавитьИндекс("ID7","ID7",0,0,".NOT.Deleted()");
фУИД.ДобавитьИндекс("UID","UID",0,0,".NOT.Deleted()");
фУИД.СоздатьФайл(СокрЛП(Каталог)+ИмяФайлаУИД,СтрЗаменить(СокрЛП(Каталог)+ИмяФайлаУИД,"DBF","CDX"));
фУИД.ЗакрытьФайл();
Иначе
ФС.УдалитьФайл(СтрЗаменить(СокрЛП(Каталог)+ИмяФайлаУИД,"DBF","CDX"));
фУИД.ОткрытьФайл(СокрЛП(Каталог)+ИмяФайлаУИД);
Пока фУИД.ВКонце() = 0 Цикл
Если ПустаяСтрока(фУИД.UID) = 1 Тогда
фУИД.Удалить();
КонецЕсли;
фУИД.Следующая();
КонецЦикла;
фУИД.Сжать();
фУИД.ДобавитьИндекс("ID7","ID7",0,0,".NOT.Deleted()");
фУИД.ДобавитьИндекс("UID","UID",0,0,".NOT.Deleted()");
фУИД.СоздатьИндексныйФайл(СтрЗаменить(СокрЛП(Каталог)+ИмяФайлаУИД,"DBF","CDX"));
фУИД.Переиндексировать();
фУИД.ЗакрытьФайл();
КонецЕсли;

Аккуратнее с составными индексами! Помни, что из БД поле читается целиком, с конечными пробелами. Для смешанных выражений, где есть и числа и даты не применяй автопреобразование: напиши преобразование к строковому виду самостоятельно. И ради Бога: год только четырьмя символами!!

sinegurochka 06.09.2012 21:48

19-Ткачик > ну да. это азы. а как еще то?

DeiMos 06.09.2012 21:51

19-Ткачик > Почему теоретики, зачем теоретики?
Почему не практики?

Нипанимаю...

VZ 06.09.2012 22:01

Школота... :[

мыша1с 07.09.2012 15:34

23-VZ >19-Ткачик >Огромное, просто большущие спасибо.

Кибер 08.09.2012 12:54

А maus то проспал подружку;)


Текущее время: 05:24. Часовой пояс GMT +3.