ДБФ с Индексами из 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-ке нет. |
а почему бы в 7.7 не создавать свой индекс? |
1) "находитЬся" - Не сочтите за розжиг, но мне реально непонятно, почему все, кто получал среднее образование в РФ так пишут? "приЙшёл", "приЙдётся" ет цетера... Реально аццки выносит мосх иностранцам всем... Россияне, вы свои мессиджи в спелл-чекере проверяйте, что-ли? 2) По поводу индексов, ИМХО, - тут тяжкая проблема стандартов DBaseII и DBaseIV. И Блондинка, скорее всего, права. Однако, чтобы проверить правы мы с Блондинкой или нет - создай этот ДБФ с индексами в 7.7 - и попробуй считать его из 7.7. |
(0) Миссис Маус?! |
3-Ткачик > Онжелина Шо-ли и Томми Хрусь-хрусть. |
*стыдно* как к уже созданой дбф создать индексный файл в 7-ке 3-Ткачик >нет |
5-мыша1с > Средствами любой СУБД. FoxBase, Clipper, FoxPro. |
Возможно ли в 7-ке создать индексный файл к уже существующему дбф? Без подключение внешних компонент? ЖК не предлагать, мои глазки там не увидели метода. |
7-мыша1с > Легко! Читай (6). |
Не надо сохранять индексный файл. Просто в модуль инициализации файла запсочить индексирование. Сия процедура достаточно быстрая, и проблем не доставит. А надежность - добавит. Кроме того, в техпроцессе один файл - это лучше, чем два ;) |
8-DeiMos > Лучше добавлять cdx средством под названием 1Cv7.exe. Проверено. |
9-VZ >милый, милый ВЗ. КАк? |
Сказанное в (10) относится к файлам, созданным в 1С. Но эти файлы [u][b]не годятся для FoxPro[/b][/u] (и утилам на его основе, вроде поделок БухСофта)! Но сами файлы прелестно очищаются, записываются, и читаются, естественно. Главное, не обращаться к полям типа MEMO. В том числе и косвенно (например, нельзя читать список полей). CDX использовать можно (MEMO-поля не индексируются. |
11-мыша1с > Щаз, покопаюсь в завалах, может, найду образец... |
11-мыша1с > [url]http://bugalt.narod.ru/dbf.htm[/url] |
14-Синегурочка >ключевое слово к существующему. ДобавитьИндекс - Метод можно использовать только перед созданием новой базы. |
15-мыша1с > открыть файл, добавить индекс и пересоздать файл уже с индексом? |
16-Синегурочка > Бредишь? Передозировка селёдки? Запомни: Всегда должен быть создан файл, а потом уже - создавай любые индексы к нему. |
16- ну в общем думаю способ один: открывать файл, перечитывать полностью и записывать в новый с индексами. Просто жду кто подскажет способ легче. Этот мне видно с первого ответа. |
(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) Теоретики... |
Пример 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")); фУИД.Переиндексировать(); фУИД.ЗакрытьФайл(); КонецЕсли; Аккуратнее с составными индексами! Помни, что из БД поле читается целиком, с конечными пробелами. Для смешанных выражений, где есть и числа и даты не применяй автопреобразование: напиши преобразование к строковому виду самостоятельно. И ради Бога: год только четырьмя символами!! |
19-Ткачик > ну да. это азы. а как еще то? |
19-Ткачик > Почему теоретики, зачем теоретики? Почему не практики? Нипанимаю... |
Школота... :[ |
23-VZ >19-Ткачик >Огромное, просто большущие спасибо. |
А maus то проспал подружку;) |
Текущее время: 05:24. Часовой пояс GMT +3. |