Главная страница
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.025 c
1-47303
Kolya
2002-06-30 00:45
2002.07.15
Объясните, где ошибка?


3-47191
Skrip
2002-06-19 14:00
2002.07.15
Файлы в ДБ


1-47465
marat2002
2002-06-27 12:06
2002.07.15
Где описана функция MakeWord


14-47701
Windeus
2002-06-18 00:43
2002.07.15
Warning и...


14-47706
DanDik
2002-06-17 21:20
2002.07.15
Ишу помошника