Форум » [x]Harbour » Нестандартная индексация. » Ответить

Нестандартная индексация.

azoo: Порядок индексации для символьных определяется ASCII-кодом. 1,3,5,а,б,в. Как сделать индексацию а,б,в,1,3,5 ?

Ответов - 11

alkresin: Вряд ли это возможно. Если это надо для того, чтобы расположить соответствующим образом строки в browse, то придется сначала сосчитать записи в массив, отсортировать как требуется - и потом сделать browse массива.

Dima: use test index on if(isdigit(f),chr(1)+f,chr(0)+f) tag tt browse() ps f это символьное поле

azoo: См. приложенный файл: https://yadi.sk/d/4tCJ3HfJsgczw Удивительно, но если эти файлы открыть с помощью browse(), сортировка получается именно типа а,б,в,1,3,5 Может битый индекс какой-то ? Если запустить reindex, то всё становится по стандарту 1,3,5,а,б,в


Dima: Зацени (это по твоей базе) use smest new index on if( isdigit(kod),chr(1)+kod,chr(0)+kod) tag test browse() reindex browse() Все ровно короче.

Dima: Harbour то свежий у тебя ?

PSP: Дим, я сейчас открывал эту базу dbedit-ом Пашиным, который он выкладывал в мае. Он тоже показал базу в порядке, где буквы сверху. Потом им же реиндексировал и всё стало по закону. Видимо ntx битый.

Dima: PSP NTX я не качал , делал свой. PSP пишет: Видимо ntx битый Тоже так подумал , хотя по жизни Reindex не использую совсем , только Index on...

Dima: PSP пишет: Видимо ntx битый. Похоже что нет , так как автоматом цепляются только CDX составные индексные файлы а у него NTX в котором по ходу ключ просто KOD.

Pasha: С индексом что-то не в порядке. В том же dbedit есть режим проверки индекса: меню Операция - Проверка индекса. Там выполняется сразу несколько проверок, этот индекс ловится на записи 84. Если выдать команды: dbGoto(84) ? ordKeyVal() то результат будет nil, а должен быть "Ж/Д" Но если добраться до записи 84 последовательно, через skip, то ordKeyVal() вернет правильное значение.

Dima: Pasha Так и есть битый индекс показывает Dbedit !

azoo: Эта база с битым индексом не менялась годами и такая индексация пользователя устраивала. Потом при переносе программы на другой компьютер переиндексировали и стало так как должно быть, но пользователь оч.просил сделать по-старому (сначала буквы, потом цифры). Переиндексировал так как советовал Dima, всё подошло. Всем спасибо.



полная версия страницы