Автор | Сообщение |
|
| постоянный участник
|
Пост N: 134
Зарегистрирован: 13.10.05
|
|
Отправлено: 15.03.09 19:43. Заголовок: INDEX с условиями
В Clipper 5.01 +Six для фильтрации баз по достаточно сложным условиям я использую временныи индексы, т.е пользователь выбрал условия и индекс создается. Примерно так: В уже открытую базу с индексами .CDX добавляю индексы .IDX INDEX ON UPPER(Fam+IM+Ot+dTOS(kLIENT->bIRTH_DATE) ) TO ("FAM_F") for (Empty(Alltrim(Klient->Cnils)) .and. (left(Klient->soCial,1) $ "12" ) ) или INDEX ON UPPER(fAM+Klient->IM+Klient->Ot+Dtos(Klient->Birth_date)) TO ("FAM_F") или INDEX ON UPPER(fAM) TO ("FAM_F") FOR For_Talon(ms,k) // условия формируются в отдельной функции Если основной индекс .CDX , то временные создаю .idx. В Clipper все нормально, в xHarbour - не получается. Тип индекса определяется при открытии базы. Может кто подскажет, как решить проблему.
|
|
|
Ответов - 3
[только новые]
|
|
|
| постоянный участник
|
Пост N: 813
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.03.09 14:09. Заголовок: Vlad04 пишет: Если ..
Vlad04 пишет: цитата: | Если основной индекс .CDX , то временные создаю .idx. |
| А зачем создавать .IDX ? Создавай обычный временный .CDX И переключайся на него.... Я так делаю всегда !
|
|
|
|
| постоянный участник
|
Пост N: 135
Зарегистрирован: 13.10.05
|
|
Отправлено: 16.03.09 18:03. Заголовок: Я с .CDX пробова..
Я с .CDX пробовал. Странно все это как-то .При одинаковом коде в Clipper все прокатывает, в xHarbour вообще выдает ошибку. Вот по этому условию создается индекс по данным в связанной базе. INDEX ON UPPER(fAM) TO ("FAM_F") FOR For_Talon(ms,k) For_Talon просматривает связанную базу и выдает .T. или .F.. Андрей, пожалуйста, пример по круче скинь на мыло orsv04@mail.ru
|
|
|
|
| постоянный участник
|
Пост N: 814
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.03.09 23:31. Заголовок: Я делаю примерно так..
Я делаю примерно так: USE BASE ORDLISTADD( "MyMainIndex.cdx" ) nKolRecords := OrdKeyCount() cIndexTo := "UPPER(FIO)+......" cFilterTo := "условие фильтрации.... .AND. DELETED()=.F." nSetOrder := <кол-во открытых индексов по этой базе> INDEX ON &cIndexTo TAG "ONE" TO ("C:\Temp\MyFileIndex.cdx") ; EVAL SAY_PROC( aBeg, ORDKEYNO() , nKolRecords) ; EVERY nKolRecords / 10 FOR &cFilterTo ADDITIVE ORDSETFOCUS( "ONE" ) DBSETORDER(nSetOrder) ......... /*********************************************************** * SAY_PROC() --> БЕГУНОК * Параметры : у,х-координаты вывода, * тек.запись, общее кол-во записей * Возвращает: всегда .T. */ FUNCTION SAY_PROC( aBeg, nRecno, nKolRecords ) MES_BARW( aBeg, nRecno, nKolRecords ) RETURN .T.
|
|
|
|