XBase - НайтиПоКлючу() #113638


#0 by 1C programmer
Подскажите, пожалуйста, как получить все записи, содержащие определенное слово, например VIKA, но не перебором всех записей, а методом НайтиПоКлючу. Приведенный ниже код находит только одну запись.
#1 by Лис в курятнике
#2 by Забаненный Директор
Проверял сам то?
#3 by Лис в курятнике
нет конечно.
#4 by Лис в курятнике
+ а в чем трабла?
#5 by goodfella
Погодь, ты в своей рабочей базе пытаешься открыть один из файлов базы. По-моему это работать не должно.
#6 by Забаненный Директор
Не знал что так можно(Если это конечно работет).
#7 by Лис в курятнике
он же написал что "Приведенный ниже код находит только одну запись" учись ;))
#8 by 1C programmer
Файл можно открывать, если режим не монопольный.
#9 by Забаненный Директор
Ты лучше скажи спаботал код Лиса или нет
#10 by 1C programmer
Код не работает...
#11 by Лис в курятнике
почему? тема не раскрыта.
#12 by Забаненный Директор
А если:
#13 by 1C programmer
Не знаю почему... Как-нибудь можно без перебора обойтись? Интересует именно НайтиПоКлючу или Найти. Файл очень большой, перебором долго ищет.
#14 by zzzzz
Домой вернусь - погляжу. Где-то года два назад делал такое. Конфа дома точно есть.
#15 by Лис в курятнике
не работает или не охота перебором? у тебя записи по индексу стоят... отсортированы они... друг под дружкой тобишь... че те исчо надо?
#16 by zzzzz
Но там дальше нужно (по воспоминаниям) просто использовать метод следующая и проверять индекс.
#17 by zzzzz
КонецЦикла; Проверь. Это не из дома, но должно работать.
#18 by Valery
Без перебора необойтись.
#19 by шон
Не мучайся.Возьми фокспро и делай скока надо.
#20 by denpro
Фильтр ДБФ по вхождению в код_чегото "Код", работает без проблем. AX_TNR - поле в ДБФ код_чегото. База.ДобавитьИндекс("IDXCODE", "AX_TNR", 1, 0, Строка(""""+СокрЛП(Код)+""""+" $ AX_TNR" ));
#21 by Valery
Да проще надо
#22 by denpro
+ Очень большое значение играет регистр символов. К поле ДБФ желательно чтобы всегда вводилось в верхнем регистре соотв. СокрЛП(Врег(Код)).
#23 by denpro
Все херня, если сделать как в , в базе будут записи удовлетворяющие вхождению строки "Код", в поле (здесь AX_TNR). и не надо делать больше никаких сравнений.
#24 by Valery
Поддерживаю лучще создать свой индекс, если неизвестен готовый. Может надо Искать не "VIKA", а "VIKA     ".
#25 by denpro
Что искать не важно, если Код="VIKA", то в базе будут записи удовлетворяющие "%VIKA%"
#26 by 1C programmer
Такой код не работает.
#27 by Лис в курятнике
#28 by denpro
... Написано используй
#29 by Valery
Что-то я не понял,  что ты лепишь. В 20 понятно. Создал индекс, 23 что такое. Перебор всей базы что-ли
#30 by denpro
Я написал - создал индекс и можешь перебирать всю базу без всяких "Если".
#31 by Valery
он у тебя не работает потому, что не находит запись.
#32 by Valery
И как же ты найдешь нужную запись без условия?
#33 by Лис в курятнике
условие в индексе...
#34 by denpro
Не понял... База.ДобавитьИндекс("IDXCODE", "AX_TNR", 1, 0, Строка(""""+СокрЛП(Код)+""""+" $ AX_TNR" )); Фильтрует База по вхождению в поле AX_TNR строки Код. Я понимаю именно это нужно было автору.
#35 by Valery
И что для каждого икомого значения ты будешь индекс создавать?
#36 by Лис в курятнике
будет ли это быстрее?
#37 by denpro
ДБФ 400000 записей, создание индекса с перебором и загрузкой в ТЗ занимает меньше 1 минуты. (локально на моей машине: индекс 2 сек и выгрузка в ТЗ примерно 15 сек)
#38 by Соратник
Вопросик дополнительный. А чтоб это дело универсальней сделать нужно программно определить название файла дбф, соответствующего справочнику. Для этого только ДД парсить? или проще способы есть?
#39 by Valery
Первый класс вторая четверть. Для каких-то задач, где фильтр не меняеся, это еще прокатит, но для данной ситуации, это ерунда. поиск и перебор несколких записей будет быстрее, т.к при создании индекса база сканируется целиком, это всегда будет медленней, да тут даже не в скорости дело, а в технологии.
#40 by 1C programmer
Всем спасибо за совет. Теперь все работает... Воспользовался , только переделал немного...
#41 by Лис в курятнике
БЛИН. ну в же ответ дал... тока сокрлп надо было поставить...
#42 by denpro
Странно, вопрос задавал не ты, но что то пытаешся доказать. В прочем, мне все равно. Я не навязываю свой вариант. Однако в моем случае (для моей базы), это работает намного быстрее, даже если пользователь введет код такой что в базе только одна запись будет ему соответствовать, мой код сработает в разы быстрее чем перебор всех 400000.
#43 by 1C programmer
(41 ) Все дело было не в СокрЛП, а в ВРег (или НРег)... Можно так еще:
#44 by Лис в курятнике
неработает... неработает... все нормально работает... просто ты условия правильно не поставил...
#45 by 1C programmer
Лису в курятнике отдельное списибо ;-)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям