Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизГлюк в Halcyon? Составной индекс. Найти похожие ветки
← →
sniknik (2002-06-20 16:53) [0]Использую Halcyon для построения Клиперовских индексов (не для себя изменить не могу только исправить).
Индекс такого вида
TDest.IndexOn(BaseDir+"\DiscCrd.Ntx", "", "PADR(STR(Type,3,0),3) + PADR(CODE,25) + STR(GR1,6,0) + STR(GR2,6,0) + STR(GR3,6,0) + STR(GR4,6,0) + STR(GR5,6,0)", "", Unique, Ascending);
проблема с этой частью PADR(CODE,25)
по идее команда должна усекать строку до 25 символов (сама строка 30) и строить индекс по усеченной строке. Чего не происходит (смотрел в индексном файле построен по полным строкам)
с остальными полями проблем нет т.к. они соответствуют по длинне (первый PADR)
строка из моего индекса
4!621997ZZZZZZZZZZZZZZZZZZ 0 0 0 0 0
и оригинального
4!621997ZZZZZZZZZZZZZZZZZZ 0 0 0 0 0
разница что называется невооружонным глазом видна
Изза этого и индексный файл больше получается чем оригинал.
Ктонибудь знаком с проблемой? Есть патч? Или знает что можно сделать?
← →
sniknik (2002-06-20 18:21) [1]Во первых прошу прощения за дезинформацию
PADR(CODE,25) не усекает строку а наоборот дополняет пробелами до указанной длинны.
а глюк возникает потому что в каком-то месте (не разобрался пока) строка считывается с поля полная (забитая до конца пробелами) и она и используется при построении индекса.
это конечно не решает проблемы, "что делать". Но может кто подскажет?
← →
sniknik (2002-06-21 18:06) [2]Штото никто не отвечает, ну да ладно сам решил, благо есть исходники и проблема ясна.
Все свелось к исправлению модуля gs6_dbf
процедура FieldVarResult
в обработку текстового поля добавим TrimRight
вот тут
"C" : begin
ExpResult := rtText;
s := TrimRight(DataTable.gsFieldGetN(DataField));
BufVar := s;
end;
довольно странно что его нет в формировании индексов, т.к. при считывании строки это есть
процедура gsStringGetN
строки
s := gsFieldPull(FieldPtr, CurRecord);
s := TrimRight(s);
кто использует Halcyon имейте в виду. Хотя может это старый баг пофиксенный просто сам модуль у меня еще старше :-).
← →
sniknik (2002-06-24 10:22) [3]Еще раз corry, но решение неверное, т.к. простой индекс (просто по одному текстовому полю) строится именно по полному полю (дополненный до размера пробелами). Чтож у них так там все по разному?
В общем все пришлось вернуть на место и менять обработку функции PADR, черт бы побрал этот клипер, буду надеятся что хоть сейчас это ни счем не пересечется. А пока все мои индексы соответствуют оригиналам, надо по деруву постучать чтоб не зглазить ;-).
← →
Alexandr (2002-06-24 10:32) [4]тихо сам с собою...
← →
sniknik (2002-06-24 10:38) [5]Так если б кто ответил. Но видать слишком сложно для них. А после ляпа был просто обязан исправить.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c