Не могу подобрать индекс не усекая по умолчанию ключ. 810

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Не могу подобрать индекс не усекая по умолчанию ключ. 810

Сообщение san »

После перехода на версию 810 сломалась выборка в вип программе.
create view
from synonym oborot oborotBuh
where((
PlansSch.nrec == oborotBuh.cPlansSch
oborot.sodpr == oborotBuh.sodpr
));
Компилятор выдает:Предупреждение: Не могу подобрать индекс не усекая по умолчанию ключ для таблицы OBOROTBUH.

Ключ на Oborot cPlansSch+sodpr такой есть (OBOROT30). Компилятору не нравится поле sodpr.
В 712 это работало без проблем. Структура индекса в версиях 7 и 8 одинаковая.
Кто знает что это за новости?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

видимо в индексе теперь указана длина меньше чем размер поля. В таких случаях нужно писать
'??????' <<=sodpr
and '??????'+chr(251) >>=sodpr
можно (length=??) еще добавить, но сие не на всех субд прокатывает.
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

Длина в индексе меньше поля, это так. В 712 длина тоже меньше поля.
Вообщем (length=??) помогло. Платформа ms sql.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

поможет если у вас значение меньше, чем длина индекса во всех записях. А мож на 810 починили. Раньше на mssql и не работало - записи в выборку банально не попадали, если длина ключа=length.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Сообщение Алексей »

наткнулся на такую же ошибку. таблица EXCLASSSEG индекс
CLASSCODE
NAME

мне нельзя писать <<= т.к. мне нужен именно одна конкретная запись, название которой полностью совпадет. в принципе, программа работает верно. просто не обращать внимание на предупреждение?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Сообщение edward_K »

length вам поможет убрать сие предупреждение
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Сообщение KATZ »

Здесь еще нюанс появляется. В EXCLASSSEG индексируемая часть поля NAME имеет размер 40 символов. Если у вас несколько записей, у которых они одинаковые, то все записи попадут в выборку. Например, есть наименования

Дополнительный внешний классификатор 0001
Дополнительный внешний классификатор 0002
Дополнительный внешний классификатор 0003


и вы задаете

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

...
where
((
  MyCode==EXCLASSSEG.CLASSCODE and
  'Дополнительный внешний классификатор 0001'==EXCLASSSEG.NAME (Length=40)
))
...
Не удивляйтесь, что в выборку попадет не только 0001, но и 0002 c 0003.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Сообщение Screw »

Что же в том удивительного, если, сравниваются только первые 40 символов ключа, т.е., по сути, выбираются все записи, начинающиеся с "Дополнительный внешний классификатор 000"?
Виталий
Ответить