Форум » Clipper » фильтрование базы с большим количеством записей » Ответить

фильтрование базы с большим количеством записей

SergeyKorotun: clipper 5.01 есть база следующей структуры: id n 7 name character 42 В этой базе более миллиона записей, name не повторяется. В get поле вводится несколько символов, потом после нажатия какой то комбинации клавиш выводится только та часть записей базы, в которых первые символы поля name совпадают с введенными в поле get. Так вот если применить set filter to. то фильтрация продолжается очень продолжительное время и поэтому для базы с большим количеством записей не подходит. Даже если дождаться и начать двигаться по записям, то переход от записи к записи не замедляется, так как база отсортирована по name. но когда с первой отображенной записи шагнуть выше или после последней отображенной шагнуть вниз - снова большая задержка. Причина задержек мне понятна. Вопрос: чем заменить set filter to? Переписывать нужные записи в массив тоже не подойдет, так как при небольшом количестве введенных символов в get поле количество записей, подходящих под критерий выборки может превысить максимальный размер массива.

Ответов - 53, стр: 1 2 3 All

AlexMyr: SergeyKorotun пишет: Это база с списком всех фамилий Украины Пенсионный фонд, налоговая инспекция?

Vlad04: SergeyKorotun пишет: Существует официальная программа на Фокспро, но очень неудобная в использовании. Хотя отфильтрованный справочник фамилий высвечивается практически мгновенно. Подозреваю, что Фокспро использует запросы. Я то же при формировании выборок, отчетов использую запросы, которые можно формировать в ADSRDD. Хотя меня наши"корифеи" освистали, считаю такую возможность очень удобной и достаточно быстрой.

СевДон: SergeyKorotun пишет: Индексация базы каждый раз перед вызовом из get поля не подходит (пере)индексация выполняется в сл.случаях: 1. при отсутствии индекса (первый запуск системы) 2. при обнаружении некорректного завершения предыдущего сеанса задачи 3. из задачи как профилактика (в случае предположения о разрушении индекса, редко но бывает) моё предложение о замене выборки на быстрый поиск 1й записи основывается на том, что оператор всё равно будет искать визуально треб. запись и терять время на выборку -- эт лишнее. например, если надо найти Иванищенко, достаточно ввести Иван (а это и так надо будет делать) и дальше оператор скролингом вниз будет высматривать нужное фамилиё. и если он увидит на очередном экране, например, Кабанов он и так поймёт что поиск(выборка) не удался.


SergeyKorotun: Andrey пишет:  цитата: Или я заблуждаюсь? Тогда дайте ссылку на нормальную доку по Harbour Заблуждаешься... Бери и пользуйся.... http://clipper.b.qip.ru/?1-4-0-00000515-000-0-0-1267900828 Не нашел там доку по функциям, командам, ... Harbour

PSP: SergeyKorotun пишет: Не нашел там доку по функциям, командам, ... Harbour Все так же, как и в Клиппере. Просто компилируй свои исходники Харбором и получай 32-разрядное Win-приложение.

SergeyKorotun: PSP пишет: Все так же, как и в Клиппере. Просто компилируй свои исходники Харбором и получай 32-разрядное Win-приложение. Проблема в том, что в клиппер 5.01 недостаточно функций для реализации поставленной задачи. А русскоязычного NG для клиппер 5.3 не нашел. Помогите ссылками или бросьте на мой ящик korotun_sn@mail.ru. А получится дос или вин приложение, не столь важно. А возможно с вин приложением будут проблемы с украинскими буквами. Используется keyrus

PSP: Русских у меня нет. А английская доступна, к примеру, вот так: http://www.ousob.com/ng/53guide/

SergeyKorotun: СевДон пишет: моё предложение о замене выборки на быстрый поиск 1й записи основывается на том, что оператор всё равно будет искать визуально треб. запись и терять время на выборку -- эт лишнее. например, если надо найти Иванищенко, достаточно ввести Иван (а это и так надо будет делать) и дальше оператор скролингом вниз будет высматривать нужное фамилиё. и если он увидит на очередном экране, например, Кабанов он и так поймёт что поиск(выборка) не удался. Дело в том что в программе не один справочник с большим количеством записей. И если в справочнике фамилий двух одинаковых нет, то в справочнике населенных пунктов сколько угодно. И прокрутив немного далее записи, можно выбрать искомый населенный пункт, но с другого района. Поэтому неподходящие записи не должны быть видимыми(другой области и другого района). А справочник с фамилиями был дан для примера. Не один здравомыслящий оператор не будет набирать только часть фамилии, чтобы затем несколько букв выбрать из (1 100 000 записей/30 букв алфавита/4 введенных в вашем примере букв (ИВАНищенко))=около 10 000 записей. Ему проще добрать ИЩЕНКО

SergeyKorotun: PSP пишет: Русских у меня нет. А английская доступна, к примеру, вот так: http://www.ousob.com/ng/53guide/ Английский NG устанавливается при инсталляции клиппер 5.3, подошла б дока в любом виде на русском языке

AlexMyr: PSP пишет: SergeyKorotun пишет: цитата: процентов 90 уже написано. Ничего переписывать не надо. Оптимальный вариант - Harbour. SergeyKorotun пишет: Но заставлять изучать Harbour, это все равно что заставлять фирму по производству телевизоров усовершенствовать черно-белый телевизор. Или я заблуждаюсь? Скорее всего заблуждаетесь. Вот Ваша цитата: SergeyKorotun пишет: Я не переделываю программу, а пишу новую. Существует официальная программа на Фокспро, но очень неудобная в использовании. Что Вы делаете? Правильно - усовершенствуете. Так что определитесь что Вам надо.

SergeyKorotun: AlexMyr пишет: Что Вы делаете? Правильно - усовершенствуете. Так что определитесь что Вам надо. В базе есть вся информация о клиенте. Допустим в клиента изменился почтовый индекс. Очень распространенный случай. Был шестизначный, стал пятизначный. В официальной программе все надо ввести вручную (форма, которую заполняет клиент занимает весь лист формата А4, пол листа - вопросы, на второй половине - ответы). Правда в некоторые поля можно занести значения, выбрав их из справочника. Но далеко не во все поля. И чтобы добраться до справочника, нужно нажать несколько клавиш. В некоторые поля значения проще было бы занести вручную, но в программе реализован только выбор из справочника. Например к полю кем выдан паспорт (70 символов) справочник вообще не подключен. И вот для того чтобы изменить один почтовый индекс, нужно ввести пол листа А4 текста. Пишу отдельную программу, которая использует копии справочников из официальной программы (обновляются раз в сутки). После обновления копирую необходимые базы в свою программу и в этой программе ввожу заявления клиентов на протяжении дня. Вечером подливаю набранные заявления в базу официальной программы, передаю их в центр, а свою базу от введенных за день заявлений очищаю. У каждого клиента есть уникальный номер. После его ввода в моей программе все данные клиента заполняются в поля автоматически и оператору остается только для вышеприведенного примера изменить только почтовый индекс. Еще пол-года назад прога стояла на 133 пентиуме, сейчас на 700 целероне 128 ОЗУ, вин98

Haz: SergeyKorotun пишет: Пишу отдельную программу, которая использует копии справочников из официальной программы (обновляются раз в сутки) Задача в целом понятна, но харбур все же попробуйте, функционал с клиппер 5.0 не сравнить просто. Кстати как подливаете ? если оригинал на фоксе, значит своими вливами рушите ему все индексы ...

SergeyKorotun: Haz пишет: Задача в целом понятна, но харбур все же попробуйте, функционал с клиппер 5.0 не сравнить просто. Кстати как подливаете ? если оригинал на фоксе, значит своими вливами рушите ему все индексы ... Добавляться записи будут в две-три базы. В этих базах много записей не бывает (не больше тысячи), так как это база промежуточная и после поступления квитанции из центра записи в основной базе обновляются соответствующими записями из промежуточной, а из промежуточной удаляются. Переиндексация много времени не займет. Так что поначалу придется переиндексировать с офисной программы несколько баз. Там есть такая возможность. Потом или сам разберусь как в фокспро создать индекс или кого-то попрошу написать *.app. В батник включу сначала свою программу, потом *.app и все будет делаться автоматом. Я не могу перейти на харбур или хотя бы на клиппер 5.3, не имея документации на русском языке. Выкручусь как то и клиппером 5.01. Просто, поскольку планирую поделиться программой с коллегами по области, не хотелось чтобы она хотя бы в чем-то уступала официальной. И не по теме просьба: дайте нормальных настроек функции color("x/x,x/x,x/x,x/x,x/x") для get объектов.

Andrey: SergeyKorotun пишет: Я не могу перейти на харбур или хотя бы на клиппер 5.3, не имея документации на русском языке. Выкручусь как то и клиппером 5.01. Это только кажется что перейти на Харбор сложно. Инструкцию по переходу мою читали ? Судя по вашим сообщениям нет !!! Там у меня все по шагам расписано. Мне письма присылают на почту благодарственные за доку по переходу. На Клипере 5.01 глупо оставаться имея Харбор. Тем более лицензия нужна даже на Клипер 5.01.

SergeyKorotun: Andrey пишет: Это только кажется что перейти на Харбор сложно. Инструкцию по переходу мою читали ? Судя по вашим сообщениям нет !!! Там у меня все по шагам расписано. Мне письма присылают на почту благодарственные за доку по переходу. На Клипере 5.01 глупо оставаться имея Харбор. Тем более лицензия нужна даже на Клипер 5.01. У нас никто лицензий не проверяет. Инструкцию читал, имея такую инструкцию и мавпа откомпилирует. Но что мне даст переход, если я смогу применять только функционал с клиппера 5.01 и не смогу применить ни одной новой функции или команды харбора, так как нет их описания на русском языке. Английского не знаю.

Andrey: SergeyKorotun пишет: Но что мне даст переход, если я смогу применять только функционал с клиппера 5.01 и не смогу применить ни одной новой функции или команды харбора, так как нет их описания на русском языке. Английского не знаю. Переход даст во первых СКОРОСТЬ ! Харбор быстрей Клипера на порядок, да и Фокс обгонит. Во вторых все функции Клипера 5.01 должны работать на хХарборе, различия в синтаксисе минимальны. А дока на русском на Клипер 5.01 ЕСТЬ ? Английского я тоже не знаю. Но посмотреть как функция написана в английской доке - любой школьник сможет. Что не поймешь, здесь можно будет спросить. Ссылки на NG по клиперу http://files.mail.ru/8Z0JN1 По хХарбору хелпер здесь на форуме поищи.

Pasha: SergeyKorotun пишет: Но что мне даст переход, Вы хотя бы сможете легко решить эту маленькую проблему с фильтром. Используя dbedit с 5.01, она на решается в принципе. А с харбором - легко, надо только scope выдать. Конечно, также легко она решается и переходом на 5.2/5.3, но такой переход сейчас бессмыссленный, поскольку уже давно есть харбор. Используя харбор, вы будете иметь сырцы всеого, сможете посмотреть, как работает та или иная функция. Не будет проблем с использованием dos, а их все больше и больше. Ну и tbrowse неплохо бы освоить, пора бросать рудименты и атавизмы вроде dbedit

Haz: SergeyKorotun пишет: Но заставлять изучать Harbour, это все равно что заставлять фирму по производству телевизоров усовершенствовать черно-белый телевизор. Сергей давайте по порядку разберем что же вы хотите и какие есть варианты. Итак, чем заменить set filter to, при обязательных условиях: Дано: 1 "Английского не знаю." 2."TBrowse тогда не освоил." и "лучше перейду на 5.х, чем на 5.01 осваивать tbrowse" 3."А получится дос или вин приложение, не столь важно." 4. "оператор не будет набирать только часть фамилии ИВАНищенко. проще добрать ИЩЕНКО" 5. "133 пентиуме, сейчас на 700 целероне 128 ОЗУ, вин98" 6. "Пишу отдельную программу, которая использует копии справочников" и "после копирования могу например отсортировать." 7. "Так что поначалу придется переиндексировать" 8. Клиппер 5.01 Предложения 1. Разобраться с Tbrowse - по условиям 2 и 4 не подходит 2. Условная индексация - по условию 8 не подходит 3. Перейти на SIXRDD и более быстрые индексы, там есть шаблоны типа ("*ИЩЕНКО")- по условию 1 опять мимо 4. Перейти на Клиппер 5.х - по условию 1 и 4 мимо 5. Перейти на ADSRDD, где есть SQL - по условию 1 мимо 6. Использовать Харбур - - по условию 1 мимо Вывод - остается сменить тачку ( условие 5 ) на конфигурацию при которой тормоза исчезнут. Чистый Клиппер 5.0 вообще не годится для решения задачи с условием 4, можете писать на чем угодно, что понимает dbf формат (все равно работа с копией и проблема совместимости с мастер-базой не волнует). Ну а теперь про "телевизор" или почему харбур. 1. Минимальные переделки - 90% написанного не надо переписывать 2. win32 приложение - используется вся доступная оперативка, а не кусок ~ в 500к для досовского приложения 3. понимает dbf и кучу других форматов, а также много-много других возможностей 4. в отличие от клиппер не вешает проц на 100% ( клиппер использует 21 прерывание для опроса клавы, позднее был патч , который позволял использовать коммуникационное 2F прерывание ), на вынь выше 98 более двух одновременных задач на непатченом клиппере заставляют задуматься о вечном. SergeyKorotun, как ни крути ... но выбирать между Клиппер и чем-то еще все же придется. PS. Лично я вашу задачку с примером на данном справочнике решал бы через ADS одной строкой SELECT * FROM Base WHERE Name Like "%ИЩЕНКО%", с предварительной индексацией по Name

leo: В свое время я работал на Clipper 5.2 и для решения таких задач с успехом использовал библиотеку Six3. Sx_SetScope( 0, DtOs( m->dDat1 ) ) Sx_SetScope( 1, DtOs( m->dDat2 ) ) ............................................... Sx_ClrScope(0) // Clear SCOPETOP Sx_ClrScope(1) // Clear SCOPEBOTTOM и все дела!Andrey пишет: Andrey Харбор быстрей Клипера на порядок, да и Фокс обгонит Ну это вы уже загнули! Удобнее и комфортнее для программиста - согласен, но на порядок...

Andrey: leo пишет: Ну это вы уже загнули! Я тесты делал в свое время (лет 5 назад) для Клипера 5.3б и хХарбора 0.77 ! По созданию базы, индексации, условной индексации - все быстрей... Когда переделал ВСЕ свои программу - то пропала необходимость в трудоемком сопровождении на Клипере. Ну не живет Клипер 5.3б нормально в сети !!! Да и пользователи довольны стали, программы шустрей работают и не сваливаются за день НИ РАЗУ !!!



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