Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Глюк в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
14-47799
Stringer
2002-06-15 19:43
2002.07.15
как сделать свой шрифт


1-47423
DenNNis
2002-07-03 08:32
2002.07.15
Переменная типа Date ???


1-47458
ded_di
2002-07-03 14:28
2002.07.15
TExcelApplication


1-47524
Skywalker
2002-07-01 11:23
2002.07.15
Как в BCPP узнать длину динамического массива?


14-47760
Abajun
2002-06-13 17:46
2002.07.15
Рисование линий уровня