К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

ДБФ с Индексами из 8 в 7

Гость
0 - 06.09.2012 - 18:06
Решила вот обратиться к коллективному мозгу. в 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-ке нет.



1 - 06.09.2012 - 18:59
а почему бы в 7.7 не создавать свой индекс?
Гость
2 - 06.09.2012 - 19:45
1) "находитЬся" - Не сочтите за розжиг, но мне реально непонятно, почему все, кто получал среднее образование в РФ так пишут?

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

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

Однако, чтобы проверить правы мы с Блондинкой или нет - создай этот ДБФ с индексами в 7.7 - и попробуй считать его из 7.7.
3 - 06.09.2012 - 20:05
(0) Миссис Маус?!
Гость
4 - 06.09.2012 - 20:14
3-Ткачик > Онжелина Шо-ли и Томми Хрусь-хрусть.
Гость
5 - 06.09.2012 - 20:40
*стыдно* как к уже созданой дбф создать индексный файл в 7-ке
3-Ткачик >нет
Гость
6 - 06.09.2012 - 20:45
5-мыша1с > Средствами любой СУБД.
FoxBase, Clipper, FoxPro.
Гость
7 - 06.09.2012 - 20:56
Возможно ли в 7-ке создать индексный файл к уже существующему дбф? Без подключение внешних компонент? ЖК не предлагать, мои глазки там не увидели метода.
Гость
8 - 06.09.2012 - 20:57
7-мыша1с > Легко!
Читай (6).
Гость
9 - 06.09.2012 - 20:57
Не надо сохранять индексный файл. Просто в модуль инициализации файла запсочить индексирование. Сия процедура достаточно быстрая, и проблем не доставит.
А надежность - добавит.
Кроме того, в техпроцессе один файл - это лучше, чем два ;)
Гость
10 - 06.09.2012 - 20:59
8-DeiMos > Лучше добавлять cdx средством под названием 1Cv7.exe. Проверено.
Гость
11 - 06.09.2012 - 21:05
9-VZ >милый, милый ВЗ. КАк?
Гость
12 - 06.09.2012 - 21:14
Сказанное в (10) относится к файлам, созданным в 1С. Но эти файлы не годятся для FoxPro (и утилам на его основе, вроде поделок БухСофта)!
Но сами файлы прелестно очищаются, записываются, и читаются, естественно. Главное, не обращаться к полям типа MEMO. В том числе и косвенно (например, нельзя читать список полей). CDX использовать можно (MEMO-поля не индексируются.
Гость
13 - 06.09.2012 - 21:15
11-мыша1с > Щаз, покопаюсь в завалах, может, найду образец...
Гость
14 - 06.09.2012 - 21:20
11-мыша1с > http://bugalt.narod.ru/dbf.htm
Гость
15 - 06.09.2012 - 21:23
14-Синегурочка >ключевое слово к существующему.
ДобавитьИндекс - Метод можно использовать только перед созданием новой базы.
Гость
16 - 06.09.2012 - 21:31
15-мыша1с > открыть файл, добавить индекс и пересоздать файл уже с индексом?
Гость
17 - 06.09.2012 - 21:35
16-Синегурочка > Бредишь? Передозировка селёдки?

Запомни:
Всегда должен быть создан файл, а потом уже - создавай любые индексы к нему.
Гость
18 - 06.09.2012 - 21:41
16- ну в общем думаю способ один: открывать файл, перечитывать полностью и записывать в новый с индексами. Просто жду кто подскажет способ легче. Этот мне видно с первого ответа.
19 - 06.09.2012 - 21:42
(15) Глядишь, я успею раньше VZ?

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


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

(16), (17) Теоретики...
Гость
20 - 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"));
фУИД.Переиндексировать();
фУИД.ЗакрытьФайл();
КонецЕсли;

Аккуратнее с составными индексами! Помни, что из БД поле читается целиком, с конечными пробелами. Для смешанных выражений, где есть и числа и даты не применяй автопреобразование: напиши преобразование к строковому виду самостоятельно. И ради Бога: год только четырьмя символами!!
Гость
21 - 06.09.2012 - 21:48
19-Ткачик > ну да. это азы. а как еще то?
Гость
22 - 06.09.2012 - 21:51
19-Ткачик > Почему теоретики, зачем теоретики?
Почему не практики?

Нипанимаю...
Гость
23 - 06.09.2012 - 22:01
Школота... :[
Гость
24 - 07.09.2012 - 15:34
23-VZ >19-Ткачик >Огромное, просто большущие спасибо.
25 - 08.09.2012 - 12:54
А maus то проспал подружку;)


К списку вопросов






Copyright ©, Все права защищены