Страница 1 из 1

Динамический индекс

Добавлено: 07 окт 2010, 13:48
BlazeBio
Можно ли задавать индекс динамически? Например, в select'е таблица katmc(x), где - х -нужный индекс. Если можно то хотелось бы узнать какото типа будет в данном случае х? :?:

Re: Динамический индекс

Добавлено: 07 окт 2010, 15:17
edward_K
а нафига? Обычно все регулируется поднятием соотв. порядка(для всей лог.таблицы) или bounds c ordred by. Ну не удобно - зато по коду понятно. По идее там номер индекса, но вот скушает ли компилятор?. Есть функции по работе с префиксом таблицы.

Код: Выделить всё

function GetGrOrEq (iTable : integer;
                    iIndex : integer
                   ) : boolean;
например посмотрите. Но проще выгрузить во времянку , по переменной изменить поле для сортировке и все.

Re: Динамический индекс

Добавлено: 07 окт 2010, 16:58
BlazeBio
Для сортировки нужно. Потому что, если order by использовать, и setorder устанавливать - долго процесс идёт открытия окна, а по индексу как-то сразу получается. Времянка подошла бы, если б не небыло вставки в таблицу, которая хранится в БД.

Re: Динамический индекс

Добавлено: 07 окт 2010, 17:05
edward_K
если 2,3 сортировки нужно то сделайте несколько bounds и подымайте их

Код: Выделить всё

bounds MainBound_nsopr  = 
        TypeSopr == KatSopr.VidSopr
        ordered by KatSopr.Vidsopr,katsopr.yearsopr,katSopr.NSopr
bounds dMainBound_nsopr = 
        TypeSopr == KatSopr.VidSopr and
        year(begdate) == KatSopr.yearsopr 
        and (begdate<=katsopr.dsopr and enddate >= KatSopr.dSopr)
        ordered by KatSopr.Vidsopr,katsopr.yearsopr,katSopr.NSopr  
тут главное не свалится во внешную выгрузку(поля подбираете под условие фильтрации и существующие индексы)
или ordered by index ....
в коде pushbounds(tbMainBound_nsopr). Такие bounds не желательно добавлять через AddBounds.