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

Добавить ключ для временной таблицы

Добавлено: 07 май 2009, 09:43
Larisa
Пожскажите пожалуйста.
Создала временную таблицу, описала составной индекс
table struct tab26
( ckau: comp,
sumob: double,
datob: date,
scheto:string,
subossch:string,
schetk:string,
subschk:string,
sodpr:string,
sodprr:string,
da1: date,
da2: date
) with index (d=da1+da2);
При компиляции ругается нужен ключ для da1+da2.
Как создать ключ для составного индекса?

Добавлено: 07 май 2009, 09:56
Алексей
with Index
(
i02 = da1+da2
);

Добавлено: 07 май 2009, 10:23
Larisa
Спасибо получилось.

Добавлено: 07 май 2009, 11:32
Larisa
Извините не получилось все равно ругается "Нужен ключ для da1+da2" хотя я написала так как вы сказали
table struct tab26
( ckau: comp,
sumob: double,
datob: date,
scheto:string,
subossch:string,
schetk:string,
subschk:string,
sodpr:string,
sodprr:string,
da1: date,
da2: date
) with index (i02 = da1+da2);
В чем может быть причина?

Добавлено: 07 май 2009, 11:49
Larisa
Подскажите пожалуйста.

Добавлено: 07 май 2009, 11:51
k_vit
Пришли кусок кода в котором у вас идёт подвязка к вашей таблице, то есть where

Добавлено: 07 май 2009, 12:04
Larisa
Есть две временные таблицы
table struct tab25
( ckau: comp,
sumob: double,
datob: date,
scheto:string,
subossch:string,
schetk:string,
subschk:string,
sodprr:string
) with index (i0=ckau);


table struct tab26
( ckau: comp,
sumob: double,
datob: date,
scheto:string,
subossch:string,
schetk:string,
subschk:string,
sodpr:string,
sodprr:string,
da1: date,
da2: date
) with index (i02 = da1+da2);

Делаю добавление из таблицы tab26 в таблицу tab25 определенных полей
.begin
if getfirst tab26 = tsok message('Есть данные в таблице tab26')
{
insert tab25 (sumob, ckau, datob, scheto, subossch, schetk, subschk, sodprr)
select tab26.sumob, tab26.ckau, tab26.datob, tab26.scheto, tab26.subossch, tab26.schetk, tab26.subschk, tab26.sodprr from tab26
where (( dfor1 <<= tab26.da1
and dfor2 >>= tab26.da2 ))
;
}
end.
Выдает ошибку Нужен ключ da1+da2 для tab26

Добавлено: 07 май 2009, 12:44
Ged
Потому что операторы
<<= и >>=
Применимы только к последней части индекса.
можно

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

Where 
(( 
   dfor1 <<= tab26.da1 
   And dfor2 >>= tab26.da1 
))
или

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

Where 
(( Какая то новая дата == tab26.da1 
   And dfor1  <<= tab26.da2 
   And dfor2 >>= tab26.da2 
))
А вот так ошибка

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

Where 
(( 
          dfor1  <<= tab26.da1 
   And dfor2 >>= tab26.da1 
   And Какая то новая дата == tab26.da2 
))

Добавлено: 07 май 2009, 13:53
Larisa
Поняла, спасибо большое. Все получилось.