XBase: работа с индексом #131669


#0 by Elkin Palkin
направьте, куда посмотреть :)В желто-красной книге по работе с XBase, а в особенности по работе с ключами, примеров меньше, наверно не бывает :)Дано:Создаю DBF файл с 4-мя полями:Code1, Code2, Cost1, Cost2.Первые два поля - текстовые, а последние - числовые.Хочу создать индекс по первым двум полям, чтобы потом при загрузке можно было дергать очень быстро.В итоге такой код (выгрузка)Д.ДобавитьИндекс("Idx","CodeOwner+CodeCost",1,0,"");Теперь хочу загрузить:Если Д.Найти(КлючПоиска,0)=0 ТогдаИ вот здесь ВСЕГДА получается =0.Где неправильно делаю?
#1 by Муму после всплытия
КлючПоиска=Формат(Спр.Владелец.Код, "С10")+Формат(Спр.Код, "С5")
#2 by Gloom
Д.ДобавитьИндекс("Idx","TRIM(CodeOwner)+TRIM(CodeCost)",1,0,"");//т.е. пробелы убрать, хотя всё-равно безграмотно - например для кодов "11"+"1" и "1"+"11" ключ одинаковый будет
#3 by Elkin Palkin
Дык у меня и там, и там (в обоих базах), длины кодов совпадают. Все равно надо форматировать?
#4 by Elkin Palkin
>хотя всё-равно безграмотноУ меня CodeOwner - уникальный вообще, а CodeCost - уникальный в пределах подчинения. Тогда не безграмотно? :)
#5 by Gloom
Если пробелы обрезать, то уникальность не поможет. В общем делай как в ...
#6 by Elkin Palkin
а подсмотреть никак нельзя значения ключа для записи? Ну к примеру перебирать записи и в этот момент посмотреть какой ключ соотвествуют этой записи? Ну или еще как-нибудь?
#7 by grd
СоздатьИндексныйФайл(<?>) разве не надо?
#8 by Elkin Palkin
У меня после строкиД.ДобавитьИндекс("Idx","CodeOwner+CodeCost",1,0,"");ИдетД.СоздатьФайл(ИмяФайлаДБФ,ИмяФайлаСДХ)Вторым параметром указывается индексный файл, поэтому и не надо СоздатьИндексныйФайл. У меня по-крайней мере индексный файл создается такой конструкцией :) Проверял :)
#9 by КонецЦикла
Вот это когда-то работало:
#10 by Elkin Palkin
Чего-то я не догоняю, а в моем случае вместоБДРасч.Ключ.CLIENT=чего писать следует?КонструкцияД.Ключ.Idx=ругается, мол, поле агрегатного объекта не обнаружено (Idx)
#11 by КонецЦикла
У мени были просто поля и индекс:**********************Если полей больше:    БДДок.ДобавитьИндекс("DEBTS","TRIM(DOCTYPE)+DTOS(DOCDATE)+TRIM(DOCNUM)+'@'",0,0,"");То и ищем по составному:      Если БДДок.НайтиПоКлючу=1 ТогдаНе говорю, что это единственно правильный спопоб, но так работалоВ твоем случае - КодеОвнер, КодеКост
#12 by Mikeware
2Д.Ключ.CodeOwner=...Д.Ключ.CodeCost=...Д.НайттПоКлючулибоД.Найти(КлючПоиска)только проверь длину строки КлючПоиска - должно быть всегда 15. Коды точно текстовые? Длины кодов точно 10 и 5?При выводе в ДБФ выводи для контроля выражение, соответствующее индексу, а при загрузке - КлючПоиска.И глупый вопрос - а в дбф-ке вообще записи есть? И тем более с таким индексом?
#13 by Elkin Palkin
Точно! :) Ур-ра! Заработала! Спасибо.Да записи есть. Там файлики многометровые получаются :) И ДБФ и СДХ, это я проверил :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С